第3章〓Vue.js指令 本章学习目标 通过本章的学习,能够理解Vue.js指令定义与分类,掌握Vue.js的内置指令使用方法,掌握自定义指令的注册方式,学会使用自定义指令实现相关工程项目的需要。 Web前端开发工程师应知应会以下内容:  理解Vue.js指令的定义与分类;  掌握条件渲染指令的使用与注意事项;  掌握列表渲染指令vfor的多种定义方法及与key属性配合使用的方法;  掌握数据绑定的多种方式;  掌握事件处理指令及事件修饰符的使用方法;  掌握其他内置指令的作用与使用方法;  掌握Vue自定义指令定义与注册的方法。 指令(Directive)本质是模板中出现的特殊符号,让处理模板的JavaScript库能够知道对相关的DOM元素进行一些相应的处理。Vue.js中的指令是以带前缀(v)的HTML属性(Attribute)的形式出现。指令是Vue给HTML标记新增的、拓展的属性,这些属性不属于标准的HTML属性,只有Vue.js认为是有效的,能够处理它。 指令的作用是当表达式的值改变时,将其产生的连带影响,响应式(Reactive)地作用于DOM上,也就是双向数据绑定。指令既可以用于普通标记,也可以用于标记。 Vue.js指令分为内置指令和自定义指令两种类型。Vue.js的指令是以v开头的。Vue提供的指令有vif、velse、velseif、vshow、vfor、vbind、von、vmodel、vtext、vhtml、vpre、vcloak、vonce等。 【基础语法】

Hello World

Hello Chu

【语法说明】 element表示标记名称; prefixdirectiveId表示通用的指令格式,如vif,v是前缀,if是指令ID; expression表示表达式。一些指令能够接受一个argument(参数),在指令名称之后以冒号表示。 指令的值是表达式,指令的值和文本插值表达式的写法是一样的。 3.1条件渲染 3.1.1vif/velse/velseif指令 vif指令用于条件性地渲染一块内容。当指令的表达式的值为true时,内容被渲染。 velse指令必须搭配vif使用,需要紧跟在vif或velseif后面,否则不起作用。可以用velse 指令给vif或velseif添加一个else块。 velseif指令充当vif的elseif块,可以链式地使用多次,以实现switch语句的功能。 【基本语法】 <标记名称 v-if="flag">v-if指令:当flag为真时,我被渲染! <标记名称v-else>v-else指令:当flag为假时,轮到我被渲染! <标记名称 v-if="expressionA">等级为优秀 <标记名称 v-else-if="expressionB">等级为合格 <标记名称 v-else>等级为不合格 【语法说明】 vif指令必须赋值为逻辑值,为true时渲染,为false时不会渲染。与vif指令配套使用的velse指令不需要指定属性值,只需要给指定的标记添加此属性即可。条件渲染时,满足条件的标记才能被渲染出来,所以包含vif和velse指令的标记只能有一个被渲染。velseif指令与vif指令必须赋值,否则不会有效果。expressionA、expressionB表达式的值为逻辑值。 【例31】条件渲染综合应用。代码如下,页面效果如图31和图32所示。 1. 2. 3. 4. 5. 6.Vue条件渲染指令的应用 7. 8. 9. 10.

条件渲染综合应用

11.
12.
13.
14.使用v-if、v-else指令综合应用 15. 16.

v-if指令:当flag为{{flag}}时,我被渲染!

17.

v-else指令:当flag为{{flag}}时,这回该轮到我被渲染!

18. 22.
23.
24.
25.
26.v-if、v-else-if、v-else指令综合应用 27. 28. 29.

结果:优秀!

30.

结果:合格!

31.

结果:不合格,请补考!

32.
33.
34.
35. 51. 52. 图31条件渲染综合应用初始渲染界面 图32单击按钮和改变成绩后渲染的界面效果 上述代码中,第15行使用von指令绑定click事件,调用change()方法,根据flag的值决定显示/隐藏第16行或第17行的

标记的内容及第18~21行模板的内容; 第25~32行主要用于多分支ifelse结构,根据第28行文本输入框中输入的数值,将成绩分数转换为等级(优秀、合格、不合格)的形式。 3.1.2Vue 3.x中key值的应用 key值在Vue中是非常重要的,可以在DOM Diff中提高DOM的可复用性。那么,key值在Vue 2.x和Vue 3.x中的使用有什么不同呢? (1) 在vif/velse/velseif指令中,key值绑定不再是必需的,因为Vue 3.x会自动生成对应的唯一key值。 (2) 若在Vue 3.x中(如vif)手动绑定key值,那么其他对应指令中(如velse)也必须手动绑定key值。 (3)