在上一讲中,我们已经将Vue常用的指令列了出来,我们这边再说明一次:
1.
v-html:绑定元素的 innerHTML
2.v-text:绑定元素的 innerText
3.v-bind:属性名:绑定属性,可以简化为:属性名
4.v-on:事件名: 绑定事件,可以简化为@事件名
5.v-if: 判断元素是否需要渲染
6.v-else-if: 与v-if合用
7.v-else: 与v-if合用
8.v-show: 判断元素是否应该显示
9.v-for: 用于循环生成元素
10.v-bind:key: 用于帮助在重新渲染时元素的比对,通常和v- for配合使用,以提高渲染效率,简写:key
11.v-model: 语法糖,用于实现双向绑定,实际上,是自动绑定了value属性值,和注册了input事件
下面我们通过一些案例来演示这些指令的使用方法:
1、v-html

程序员导航
优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站
效果:

3、 v-model
双向数据绑定的含义在于:相比较于单向数据绑定只能由数据决定页面的显示,而页面值修改不会影响原数据的值,而双向绑定的则是数据既可以决定页面显示的值,页面修改值也会同时修改对应的原数据。
你输入的内容:{{content}}
效果:

2)绑定class属性
操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是 attribute,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。不过,字符串拼接麻烦且易错。因此,在将 v-bind 用于 class 和 style 时,Vue.js 做了专门的增强。表达式结果的类型除了字符串之外,还可以是对象或数组。

AI 工具导航
优网导航旗下AI工具导航,精选全球千款优质 AI 工具集
No.1)对象语法:
我们可以传给 v-bind:class 一个对象,以动态地切换 class:
上面的语法表示 active这个 class 存在与否将取决于数据 isActive 的 值是true还是false
你可以在对象中传入更多字段来动态切换多个 class。此外,v-bind:class 指令也可以与普通的 class 属性共存:
模板代码:
data代码:
data: {
isActive: true,
hasError: false
}
渲染结果:
isActive 或者 hasError 变化时,class 列表将相应地更新。例如,如果 hasError 的值为 true,class 列表将变为 "static active text-danger"。
绑定的数据对象不必内联定义在模板里:

免费在线工具导航
优网导航旗下整合全网优质免费、免注册的在线工具导航大全
data: {
classObject: {
active: true,
'text-danger': false
}
}
渲染的结果和上面一样。我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式:
data: {
isActive: true,
error: null
},
computed: {
classObject: function () {
return {
active: this.isActive && !this.error,
'text-danger': this.error && this.error.type === 'fatal'
}
}
}
No.2)数组语法:
我们可以把一个数组传给 v-bind:class,以应用一个 class 列表:
data: {
activeClass: 'active',
errorClass: 'text-danger'
}
渲染为:
如果你也想根据条件切换列表中的 class,可以用三元表达式:
这样写将始终添加errorClass,但是只有在 isActive 是 true 时才添加 activeClass。
不过,当有多个条件 class 时这样写有些繁琐。所以在数组语法中也可以使用对象语法:
No.3)用在组件上:
当在一个自定义组件上使用 class 属性时,这些 class 将被添加到该组件的根元素上面。这个元素上已经存在的 class 不会被覆盖。
例如,如果你声明了这个组件:
Vue.component('my-component', {
template: ''
})
然后在使用它的时候添加一些 class:
HTML 将被渲染为:
对于带数据绑定 class 也同样适用:
当 isActive 为 true时,HTML 将被渲染成为:
3)绑定style内联样式
NO.1)对象语法
v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS property 名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名:
data: {
activeColor: 'red',
fontSize: 30
}
直接绑定到一个样式对象通常更好,这会让模板更清晰:
data: {
styleObject: {
color: 'red',
fontSize: '13px'
}
}
同样的,对象语法常常结合返回对象的计算属性使用。
NO.2)数组语法
v-bind:style 的数组语法可以将多个样式对象应用到同一个元素上:
NO.3)自动添加前缀
当 v-bind:style 使用需要添加浏览器引擎前缀的 CSS property 时,如 transform,Vue.js 会自动侦测并添加相应的前缀。
NO.4)多重值
从 2.3.0 起你可以为 style 绑定中的 property 提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:
这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex。
5、v-on:事件名
1)常规使用
效果:

2)vue-事件修饰符
Vue.js 为 v-on 提供了事件修饰符:
[list].stop:等同于JavaScript中的event.stopPropagation(),防止事件冒泡
.prevent:等同于JavaScript中的event.preventDefault(),防止执行预设的行为(如果事件可取消,则取消该事件,而不停止事件的进一步传播)
.capture:与事件冒泡的方向相反,事件捕获由外到内
.self:只会触发自己范围内的事件,不包含子元素
.once:只会触发一次,还能被用到自定义的组件事件上
.passive:prevent 是拦截默认事件,而passive是不拦截默认事件,能够提升移动端的性能。
[/list]
[v_blue]冒泡事件:嵌套两三层父子关系,然后所有都有点击事件,点击子节点,就会触发从内至外,子节点->父节点的点击事件[/v_blue]
[v_error]1、使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
2、不要把 .passive 和 .prevent 一起使用,因为 .prevent 将会被忽略,同时浏览器可能会向你展示一个警告。请记住,.passive 会告诉浏览器你不想阻止事件的默认行为。[/v_error]
代码案例:
No.1)不使用事件修饰符
最外层中间层最里层
点击最里层div区域,发现从里到外一次触发点击事件(即冒泡)

No.2).stop:将最里层div改为:
最里层
点击最里层div区域,发现只有最里层触发,不会向上层冒泡:

No.3).prevent,在中间层新增:
访问潘子夜博客
methods新增handlerHerf方法:
handlerHerf(){
console.log("访问潘子夜博客点击事件触发了")
}
点击请求发现页面并没有跳转到我的博客,但事件触发了:

No.4)其他的就不在此举列子了,可自行去尝试
3)vue-按键修饰符
在监听键盘事件时,我们经常需要检查详细的按键。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:
更多按键修饰符、按键码、系统修饰符等,具体的可以参考:https://cn.vuejs.org/v2/guide/events.html#%E6%8C%89%E9%94%AE%E4%BF%AE%E9%A5%B0%E7%AC%A6
6、 v-if
v-if后面跟的表达式如果为true,则会渲染,否则不会渲染
是否显示
效果:

7、v-show
v-show后面跟的表达式无论为true还是false,都会渲染,不过为true则会显示,否则会有隐藏样式,这也是和v-if的区别。
代码:
是否显示
效果:

8、v-else-if、v-else
根据输入的分数显示对应的等级
不及格
及格
中等
良好
优秀
输入分数:
效果:

9、v-for、v-bind:key
[v_blue]说明:v-for="(item,i) in users" :key="i"中item表示遍历的每一个元素,i表示遍历的索引,in换为of也可以,users表示被遍历的对象,:key每次遍历必须是不相同的值,提高渲染效率,这里我们目前先就取遍历的索引[/v_blue]
- 遍历序号:{{i}},姓名:{{item.username}},年龄:{{item.age}}
需求:实现对多个商品信息的展示,点击添加按钮会新增一个商品信息,点击删除按钮删除对应的商品信息,并且显示总记录数,当总记录数为0时,显示没有商品。
{{title}}
名称: 库存:记录总数:{{products.length}}
- 商品名:{{item.name}},库存:{{item.stock}}
没有商品







