2.1 Vue 模板语法
html 中包含了一些JS
语法代码,语法分为两种,分别为:
- 【插值语法】双大括号表达式 (“Mustache”语法)【一个】
-
2.1.1 插值语法
功能:用于解析标签体内容
写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性
插值语法:双大括号表达式 语法: {{exp}}
- 功能: 向页面输出数据
- 可以调用对象的方法
里面写js
表达式:有返回值的js
代码,而不是js
语句data
里面也可以放对象,例如下面例子中的school
,指令语法也是一样,也可以用data
里的对象名去.
对象属性,例如:v-bind:href="school.url"
代码演示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个Vue</title>
<!-- 引入vue -->
<script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
<!-- 准备一个容器,用户展示 Vue 构建的对象 -->
<div id="root">
<h1>插值语法</h1>
<h3>您好! {{name}}</h3>
<h3>您好! {{school.name}}</h3>
<hr/>
</div>
<script type="text/javascript">
//设置为 false 以阻止 vue 在启动时生成生产提示。
Vue.config.productionTip = false
//创建Vue实例
new Vue({
el:'#root',//el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
name:'Jack',
school:{
name:'李四',
url:'https://baidu.com'
}
}
});
</script>
</body>
</html>
2.1.2 指令语法
功能:用于解析标签(包括:标签属性、标签体内容、绑定事件…)
举例:v-bind:href=“xxx” 或 简写为 :href=“xxx”,xxx 同样要写js
表达式,且可以直接读取到data
中的所有属性
备注:Vue中有很多的指令,且形式都是:v-???
代码演示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个Vue</title>
<!-- 引入vue -->
<script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
<!-- 准备一个容器,用户展示 Vue 构建的对象 -->
<div id="root">
<h1>指令语法</h1>
<h3><a v-bind:href="url">去百度一下</a></h3>
<hr/>
</div>
<script type="text/javascript">
//设置为 false 以阻止 vue 在启动时生成生产提示。
Vue.config.productionTip = false
//创建Vue实例
new Vue({
el:'#root',//el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
url:'https://baidu.com'
}
});
</script>
</body>
</html>
演示效果:
**v-bind**
:可以动态的绑定属性值,例如:v-bind:x="name"
在 Vue 对象的data
里就要有个 name
的属性,v-band
的简写形式 :
,例如::href="url"
2.2 数据绑定
2.2.1 单向数据绑定
语法:v-bind:href ="xxx"
或简写为 :href ="xxx"
特点:数据只能从 data
流向页面,页面修改的值无法回填给data
代码演示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个Vue</title>
<!-- 引入vue -->
<script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
<!-- 准备一个容器,用户展示 Vue 构建的对象 -->
<div id="root">
单向数据绑定:<input type="text" v-bind:value="name">
</div>
<script type="text/javascript">
//设置为 false 以阻止 vue 在启动时生成生产提示。
Vue.config.productionTip = false
//创建Vue实例
new Vue({
el:'#root',//el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
name:'Jack',
}
});
</script>
</body>
</html>
演示效果:
下面可以看到我修改了文本框里的值,data 里的 name 没有任何改变
2.2.2 双向数据绑定
指令 v-model
语法:v-mode:value="xxx"
或简写为 v-model="xxx"
, 因为v-model
默认收集的就是 value 值
特点:数据不仅能从 data 流向页面,还能从页面流向 data,不是所有元素都支持双向绑定,<h1></h1>
h 标签就不支持双向绑定,v-model
只能用于表单类元素(输入类元素,如:input、select等)
代码演示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个Vue</title>
<!-- 引入vue -->
<script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
<!-- 准备一个容器,用户展示 Vue 构建的对象 -->
<div id="root">
单向数据绑定:<input type="text" v-bind:value="name"><br/>
双向数据绑定:<input type="text" v-model:value="age" ><p>{{age}}</p>
</div>
<script type="text/javascript">
//设置为 false 以阻止 vue 在启动时生成生产提示。
Vue.config.productionTip = false
//创建Vue实例
new Vue({
el:'#root',//el用于指定当前Vue实例为哪个容器服务,值通常为css选择器字符串。
data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
name:'Jack',
age:18,
}
});
</script>
</body>
</html>
演示效果:
可以看到双向绑定文本框值改变的时候,data 里的值也跟着改变,页面上的{{age}}
也会改变
2.3 el 与 data 的表示方式
设置代码片段
选择好使用的位置,在 HTML 页面中的使用方式v1 + TAB
2.3.1 el 的表示方式
第一种方式
创建Vue
实例对象时配置el
属性
代码演示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个Vue</title>
<!-- 引入vue -->
<script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
<!-- 准备一个容器,用户展示 Vue 构建的对象 -->
<div id="root">
<h1>您好,{{name}}</h1>
</div>
<script type="text/javascript">
//设置为 false 以阻止 vue 在启动时生成生产提示。
Vue.config.productionTip = false
//创建Vue实例
new Vue({
el:'#root',
data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
name:'Jack'
}
});
</script>
</body>
</html>
第二种方式
先创建Vue
实例,随后再通过vm.$mount( '#root ')
指定el
的值
我们先输出一下Vue
对象实例,下面所有的带$
符号的都是Vue
给我们能调用的属性
在Vue
实例中,我们能找对Vue
的原型 Prototype
,通过对原型的修改,可以实现就对象挂载到容器中,Prototype
中的$mount
是指定将对象挂载指定标识中、可以是id
、class
等。
代码演示:
从下面的代码可以看到,将Vue
实例挂载到#root
中,#root
在绑定在标签上
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个Vue</title>
<!-- 引入vue -->
<script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
<!-- 准备一个容器,用户展示 Vue 构建的对象 -->
<div id="root">
<h1>您好,{{name}}</h1>
</div>
<script type="text/javascript">
//设置为 false 以阻止 vue 在启动时生成生产提示。
Vue.config.productionTip = false
//创建Vue实例
const v = new Vue({
data:{ //data中用于存储数据,数据供el所指定的容器去使用,值我们暂时先写成一个对象。
name:'Jack'
}
});
console.log(v);
v.$mount('#root');
</script>
</body>
</html>
2.3.2 data 的表现方式
如何选择: 目前哪种写法都可以,以后到组件时,data
必须使用函数,否则会报错—个重要的原则
由Vue
管理的函数,一定不要写箭头函数,否则this 就不再是 Vue
实例了
2.3.2.1 对象式
语法:data:{}
代码演示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个Vue</title>
<script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
<div id="root">
<h1>您好,{{name}}</h1>
</div>
<script type="text/javascript">
Vue.config.productionTip = false
new Vue({
el:'#root',
data:{
name:'Jack'
}
});
</script>
</body>
</html>
2.3.2.2 函数式
语法:data:function(){return{name:'Jack'}}
简写方式 data(){}
特点:函数式方法必须要返回一个对象,data:function(){return{name:'Jack'}}
在函数中的 this
是 Vue
实例
注意:如果是箭头函数表示data:()=>{console.log(this) return(name:'Jack')}
里面的this
就是全局的Window
对象,因为箭头函数没有自己的this
只能往上一个层级找,所以就找到了Window
代码演示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>第一个Vue</title>
<script type="text/javascript" src="../vuejs/vue.js"></script>
</head>
<body>
<div id="root">
<h1>您好,{{name}}</h1>
</div>
<script type="text/javascript">
Vue.config.productionTip = false
new Vue({
el:'#root',
data:function () {
console.log(this)//此处的 this 是 Vue 实例
return{
name:'Jack'
}
}
});
</script>
</body>
</html>
演示效果: