前端学习笔记5-Vue基础语法

Vue.js使用文档及下载Vue.js

  • Vue.js使用文档已经写的很完备和详细了,通过以下地址可以查看:https://cn.vuejs.org/v2/guide/
  • vue.js如果当成一个库来使用,可以通过下面地址下载:https://cn.vuejs.org/v2/guide/installation.html
  • 可视化学习网站:https://scrimba.com/playlist/pXKqta

Vue作为前端三大框架之一(Angular.js、React.js、Vue.js)属于热度突出的一个

  • Vue.js是一个构建数据驱动的 web 界面的渐进式框架
  • Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件
  • 核心是一个响应的数据绑定系统

1、Vue的使用

(1)导包:官方提供了两个环境包

  • 开发环境版本
 <!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  • 生产环境版本
 <!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

(2)声明式渲染:采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue"></script>
</head>

<body>
    <div id="app">
        <a href="#">{{message}}</a>
    </div>  
</body>

<script type="text/javascript">	
	var vm = new Vue({
		el:'#app', 
        data:{
			message:'领取优惠劵',
        }
	})
</script>
</html>

在这里插入图片描述

2、数据绑定

(1)数据引用:{{数据key}}
(2)数据绑定:

{
	key:value,
	key2:value2,
}

案例:

<div id="app">
		<a href="#">{{message}}</a>
		<br>
		<span>{{alist}}</span> 
		<br>
		<a v-bind:href="url">戳我有惊喜</a>
		<br>
		<span :title='showmessage'>鼠标放在这里</span>
</div>

</body>
<script type="text/javascript">
	
	var vm = new Vue({
		el:'#app', 
		data:{
			message:'领取优惠劵',
			alist:['python','mysql','linux','html','js','css'],
			url:'https://blog.csdn.net/weixin_41446786',
			showmessage: '当前的时间是' + new Date().toLocaleString()
		}
	})
</script>

在这里插入图片描述

3、if条件渲染:通过条件指令可以控制元素的创建(显示)或者销毁(隐藏)

  • v-if
  • v-if和v-else:v-else要紧跟 v-if后边
 <a href="#" v-if="islogin">个人中心</a>
   <a href="#" v-else>登录</a>
  • v-if,v-else-if和v-else
<img src="" alt="皇帝" v-if="level === 1">
<img src="" alt="皇亲" v-else-if="level === 2">
<img src="" alt="国戚" v-else-if="level === 3">
<img src="" alt="大臣" v-else>
  • v-show
    ①v-show用法和v-if大致一样,但是它不支持v-else,它和v-if的区别是,它制作元素样式的显示和隐藏,元素一直是存在的
    ②注意在vue中使用v-show, 原来的css代码不能设置display属性, 会导致冲突
    在这里插入图片描述

案例:

<body>
<!-- 2.定义一个 标签 需要给一个标签添加 id -->
<div id="app">
	<a href="#" v-if="isLogin">欢迎你归来</a>
	<hr>
	<a href="#" v-if="level === 1">青铜</a>

	<a href="#" v-else-if="level === 2">白银</a>
	<a href="#" v-else>王者</a>
	<hr>

	<hr>
	<span v-if="seen">v-if</span> <br>

	<span v-show="seen">v-show</span>

</div>
</body>
<!-- 3.创建vue实例 -->
<script type="text/javascript">
	var vm = new Vue({
		el:'#app',
		data:{
			isLogin:false,
			level:2,
			seen:false,
		}
	})
</script>

4、for列表渲染

v-for item in 列表

案例:

<!-- 2.定义一个 标签 需要给一个标签添加 id -->
<div id="app">
	<ul>
		<li v-for="(item,index) in items"> {{index+1}} {{item}} </li>
	</ul>
	<hr>
	<!-- 对对象进行遍历 -->
	<ul>
		<li v-for="(value,key) in object">{{key}} {{value}}</li>
	</ul>
	<hr>
	<ul>
		<li v-for="todo in todos">{{todo.title}} ---- {{todo.author}}---- {{todo.publishedAt}}</li>
	</ul>
</div>
</body>
<!-- 3.创建vue实例 -->
<script type="text/javascript">
	var vm = new Vue({
		el:'#app',
		data:{
			items:['python','mysql','linux','html','js','css'],
			object: {
				title: 'How to do lists in Vue',
				author: 'Jane Doe',
				publishedAt: '2016-04-10'
				},
			todos: [
				{title: 'Vue',author: 'Jane Doe',publishedAt: '2016-04-10'},
				{title: 'python',author: 'Ricky',publishedAt: '2019-04-10'},
				{title: 'Amen',author: 'cjb',publishedAt: '2020-07-28'}
			]
		}
	})
</script>

在这里插入图片描述

4、methods事件:可以用v-on指令监听 DOM 事件

绑定事件:v-on:click="事件(形参,)"或者简写为@click="事件(形参,)"
事件处理:通过this来指定当前绑定的标签定义的变量

methods:{
    事件:function(实参){
   	//通过this来指定当前绑定的标签定义的变量
      this.形参
    }

案例:

<!-- 2.定义一个 标签 需要给一个标签添加 id -->
<div id="app">
	<button v-on:click="login">登陆</button> <br>
	<a href="javascript:;" @click="register">注册</a>
	<hr>
	<button @click="add(counter)">点击+1</button>
</div>
</body>
<!-- 3.创建vue实例 -->
<script type="text/javascript">
	var vm = new Vue({
		// 接管标签
		el:'#app',
		// 绑定数据
		data:{
			counter:1,
			total:0,
		},
		// 方法
		methods:{
				login:function(){
						alert('登录成功')
				},
				register:function(){
					alert('进行注册操作')
				},
				add:function(counter){
		// this 表示当前的 vue 我们通过this.total 来获取data中的变量
						this.total+=counter;
						alert(this.total)
				}
		}
	})
</script>

5、model表单

  • 可以用v-model指令在表单、及元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素;
  • v-model会忽略所有表单元素的value、checked、selected特性的初始值而总是将 Vue 实例的数据作为数据来源。你应该通过 JavaScript 在组件的data选项中声明初始值
  • 单行文本框(初始值为空)
<input type="text" name="username" v-model="username">

<script type="text/javascript">
username:'', 
</script>

在这里插入图片描述

  • 多行文本框(初始值为空)
<textarea name="desc" v-model="desc"></textarea> 

<script type="text/javascript">
desc:'', 
</script>

在这里插入图片描述

  • 单选框(初始值为空)
<input type="radio" name="sex" value="boy" v-model="sex"><input type="radio" name="sex" value="girl" v-model="sex">

<script type="text/javascript">
sex:'',
</script>

在这里插入图片描述

  • 多选框(初始值为列表
足球 <input type="checkbox" name="like" value="足球" v-model="like"> 
篮球 <input type="checkbox" name="like" value="篮球" v-model="like">
兵乓球<input type="checkbox" name="like" value="兵乓球" v-model="like"> 
<script type="text/javascript">
like:[],
</script>

在这里插入图片描述

  • 下拉框()
<select name="city" v-model="city">
<option value="北京">北京</option>
<option value="上海">上海</option>
<option value="广州">广州</option>
<option value="深圳">深圳</option>
</select> 

<script type="text/javascript">
city:'',
</script>

在这里插入图片描述
案例:

<div id="app">
    <table border="1">
      <tr><td>用 户 名</td><td><input type="text" v-model="username" @blur="checkusername"> </td></tr>
      <tr><td>密码</td><td><input type="password" v-model="password1"> </td></tr>
      <tr><td>确认密码</td><td><input type="password" v-model="password2"></td></tr>
      <tr><td>性别</td>
        <td><input type="radio" name="sex"  value="boy" v-model="sex"><input type="radio" name="sex" value="girl" v-model="sex"></td>
        </tr>
      <tr><td>爱好</td>
        <td>
          足球 <input type="checkbox" name="like" value="足球" v-model="like"> 
          篮球 <input type="checkbox" name="like" value="篮球" v-model="like">
          兵乓球<input type="checkbox" name="like" value="兵乓球" v-model="like"> 
        </td>
      </tr>
      <tr><td>所在城市</td>
        <td>
          <select name="city" v-model="city">
            <option value="北京">北京</option>
            <option value="上海">上海</option>
            <option value="广州">广州</option>
            <option value="深圳">深圳</option>
          </select> 
        </td>
      </tr>
      <tr><td>个人简介</td><td><textarea name="desc" v-model="desc"></textarea> </td></tr>
    </table>
    <button @click="register">注册</button>
</div>
</body>
<script type="text/javascript">
var app = new Vue({
  el: '#app',
  data: {
      username:'',
      password1:'',
      password2:'',
      sex:'',
      like:[],
      city:'',
      desc:''

  },
  methods:{
    register:function(){

        alert(this.username+this.password1+this.password2+this.sex+this.like+this.city+this.desc)
    },
    checkusername:function(){
      alert(this.username)
    }
  }
})
</script>

在这里插入图片描述

6、ES6语法

ES6语法入门
ES6是JavaScript语言的新版本,它也可以叫做ES2015,vue组件开发中使用更多的ES6的语法,ES6兼容ES5语法(之前学习的版本)

(1)变量说明

  • var:它是用来声明变量的。如果在方法中声明,则为局部变量;如果在全局中声明,则为全局变量
var num=10

变量一定要在声明后使用,否则报错
在这里插入图片描述

  • let:ES6新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
{
  let a = 10;
  var b = 1;
}

上面代码在代码块之中,分别用let和var声明了两个变量。然后在代码块之外调用这两个变量,结果let声明的变量报错,var声明的变量返回了正确的值。这表明,let声明的变量只在它所在的代码块有效。
在这里插入图片描述
for循环的计数器,就很合适使用let命令:计数器i只在for循环体内有效,在循环体外引用就会报错。

   for (let i = 0; i < 10; i++) {}
  • const:声明一个只读的常量。一旦声明,常量的值就不能改变。
const PI = 3.1415;

在这里插入图片描述

(2)Javascript对象的写法

  • ES5的写法
var person = { 
    name:'itcast',
    age:13,
    say:function(){
        alert('hello')
    }
}

person.say()

也可以简写为:

var person = {};
person.name='itheima';
person.age=13;
person.say = function (){alert('hello')}
person.say();

在这里插入图片描述

  • ES6的写法
//定义变量
var name='itcast';
var age=13;
//创建对象
var person = {
    name,
    age,
    say:function(){
        alert('hello');
    }
};
//调用
person.say()

在这里插入图片描述
(3)ES6的箭头函数

  • 定义函数新的方式;
 //无参数,无返回值
var say = ()=> {
    alert('我是无参数无返回值函数');
}
//有参数,无返回值
var eat = food => {
    alert('我喜欢吃'+food);
}
//有参数,有返回值
var total = (num1,num2) => {
    return num1+num2;
}
  • 改变this的指向
    如果层级比较深的时候, this的指向就变成了window, 这时候就可以通过箭头函数解决这个指向的问题
var person = {
    name:'itcast',
    age:13,
    say:function(){
        alert('my name is ' + this.name);
    }
}
//调用
person.say()

7、Vue的生命周期

  beforeCreate
        vm对象实例化之前
    created
        vm对象实例化之后
    beforeMount
        vm将作用标签之前
    mounted(重要时机初始化数据使用)
        vm将作用标签之后
    beforeUpdate
        数据或者属性更新之前
    updated
        数据或者属性更新之后

在这里插入图片描述

8、axios发送ajax请求

axios github
(1)准备工程
创建一个django工程,例如 login.创建完成之后,再创建一个子应用,例如users.最后再设置一下模板文件
在这里插入图片描述
(2)准备html和html显示
在模板文件中创建一个axios.html,内容如下

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <!-- 开发环境版本 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
  <span>{{ message }}</span> <br>
  <a href="javascript:;">登录</a> <br>
</div>
</body>
<script type="text/javascript">
var app = new Vue({
    el: '#app',
    delimiters:["[[","]]"],
    data: {
        message: 'Hello Vue!',
    },
})
</script>
</html>

(3)创建视图并加载模板的html

#url设置
from django.conf.urls import url
from users.views import ShowLoginView

urlpatterns = [
    url(r'^show/$',ShowLoginView.as_view()),
]

#视图
class ShowLoginView(View):

    def get(self,request):

        return render(request,'axios.html')

(4)导入axios,并发送GET/POST请求

  • 因为Vue的模板变量和django的模板变量分隔符冲突,所以需要修改Vue的分隔符delimiters:["[[","]]"]
  • 箭头函数解决这个指向的问题
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <!-- 开发环境版本 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <!-- 导入axios -->
  <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
<div id="app">
  <span>{{ message }}</span> <br>
  <span>[[ message ]]</span> <br>
  <a @click="login" href="javascript:;">登录-GET</a> <br>
  <a @click="login2" href="javascript:;">登录-GET2</a> <br>
  <a @click="login3" href="javascript:;">登录-POST</a> <br>
</div>
</body>
<script type="text/javascript">
var app = new Vue({
    el: '#app',
    delimiters:["[[","]]"],
    data: {
        message: 'Hello Vue!',
    },
    methods:{
        login:function(){
            let url = 'http://127.0.0.1:8000/login/?username=admin&password=123';
            axios.get(url).then(response=>{
                if(response.data.code == '200'){
                  this.message=response.data.info.username;
                }else if (response.data.code == '400') {
                  this.message=response.data.msg;
                }
            }).catch(error=>{
              console.log(error)
            })
        },
        login2:function(){
            let url = 'http://127.0.0.1:8000/login/';
            axios.get(url,{
                params:{
                    "username":"admin",
                    "password":"123"
                }
            }).then(response=>{
                if(response.data.code == '200'){
                  this.message=response.data.info.username;
                }else if (response.data.code == '400') {
                  this.message=response.data.msg;
                }
            }).catch(error=>{
              console.log(error)
            })
        },
         login3:function(){
            let url = 'http://127.0.0.1:8000/login/';
            axios.post(url,{
                "username":"admin",
                "password":"123"
            }).then(response=>{
                if(response.data.code == '200'){
                  this.message=response.data.info.username;
                }else if (response.data.code == '400') {
                  this.message=response.data.msg;
                }
            }).catch(error=>{
              console.log(error)
            })
        }
    }
})
</script>
</html>

后台代码

#定义路由
from django.conf.urls import url
from users.views import ShowLoginView, LoginView

urlpatterns = [
    url(r'^show/$',ShowLoginView.as_view()),
    url(r'^login/$',LoginView.as_view()),
]
#定义视图
class LoginView(View):
    def get(self, request):
        #获取参数
        username = request.GET.get('username')
        password = request.GET.get('password')
        #验证参数并返回相应
        if username == 'admin' and password == '123':
            return JsonResponse({'code': 200, 'msg':'ok','info': {'username': username, 'user_id': '666'}})
        else:
            return JsonResponse({'code': 400,'msg':'账号或密码错误'})

    def post(self, request):
        # 获取参数
        data = json.loads(request.body.decode())
        username = data.get('username')
        password = data.get('password')
        # 验证参数并返回相应
        if username == 'admin' and password == '123':
            return JsonResponse({'code': 200, 'msg':'ok','info': {'username': username, 'user_id': '666'}})
        else:
            return JsonResponse({'code': 400,'msg':'账号或密码错误'})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值