VueJS模板指令
前言¶
前端开发技术大致经历了这样一个过程:
- 静态页面阶段:比如JSP等都是后端渲染,前端只是负责展示静态内容
- Web 2.0时代:以jQuery和Ajax等技术为代表,前端需要和后端进行复杂的数据交互
- MVC框架阶段:比如BackboneJS框架,前端开发模式的转变
- SPA阶段:比如Angular、React、Vue JS等框架,从网站变成了网页App
但前端开发的最本质技术还是这三个:
- HTML(超链接文本标记语言):描述内容
- CSS(层叠样式表):显示样式
- JavaScript:交互操作
Vue.js框架是渐进式(自底向上逐层使用或只使用某部分功能),通过模板的一些指令,将这三个放在同一个模板文件中进行处理。
文本插值¶
以{{ var }}
的形式直接引用,在这其中也可以进行表达式计算,比如 {{ var1 + var 2}}
:
v-once:单次渲染¶
默认变量每次改变都会自动重新渲染页面对应的值,如果只要求渲染一次,则使用这个指令:
v-html:HTML渲染¶
默认是变量以文本形式渲染,如果变量内容是一段HTML,渲染时要以网页内容形式渲染,则使用:
v-bind:属性绑定¶
普通属性值¶
绑定标签属性,比如:
那么idVar的值变化了,对应h1的id就变化了,从而带动CSS样式的变化。
通过变量attributeName改变,使得var变量改变的可以是id值,也可以是class值。
这个指令常缩写为:
<h1 :id="idVar"> {{ title }} </h1>
<div :id="`list-${id}`"></div>
<h1 :[attributeName]="var"> {{ title }} </h1>
布尔类型属性值¶
针对布尔型属性的绑定,有些不同于其它属性值的情况:
但isButtonDisabled为真或空的时候,由于是布尔类型的变量,因此这个HTML标签就会包含这个叫disabled
的属性,否则就不包含该属性。
多个属性一次性绑定¶
不指定具体属性名字,而是提供一个字典让它自动匹配属性和值。
v-on:事件绑定¶
绑定事件操作:
<button v-on:click="clickFunc"> Hello </button>
<button v-on:[eventName]="clickFunc"> Hello </button>
可以缩写为:
<button @click="clickFunc(x)"> Hello </button>
<button @click.stop="clickFuncStop(x)"> Hello </button>
<button @[eventName]="clickFunc"> Hello </button>
v-model: 双向绑定¶
一般是表单中使用:
<input type="text" v-model.number="age">input age</input>
<input type="text" v-model.trim="age">input age</input>
<input type="text" v-model.lazy="title">input title</input>
改变变量可以自动改变渲染后的结果,渲染后页面中改变值也自动改变了变量的值,从而不需要再去DOM中获取对应元素更新后的值。
v-if:条件渲染¶
条件渲染,可以进行条件分支渲染:
<h1 v-if="level == 1"> Level1 </h1>
<h1 v-else-if="level == 2"> Level2 </h1>
<h1 v-else> Level3</h1>
这个指令必须附着在一个HTML标签上,有两种方式来包裹多个标签元素内容:
<div v-if="level > 3">
<span>hello1</span>
<span>hello2</span>
</div>
<template v-if="level > 3">
<span>hello1</span>
<span>hello2</span>
</template>
使用 div 标签的版本,最终渲染结果还是内容存在于一个 div 中,而使用 template 版本渲染结果只是内部标签内容。
v-show:条件显示¶
它通过变量或函数计算结果来可控制是否显示:
它只是视觉上的切换,其实元素已经渲染出来了,只是控制它的 display属性 实现是否展示给用户。
和v-if相比的话,v-if是条件为真才会渲染出来,因此它消耗的是更新渲染切换过程的性能,如果不是频繁的切换就选择v-if;而v-show它因为一开始就渲染出来了,因此初始化时消耗性能,如果会频繁显示和隐藏,则这个v-show好。
v-for:遍历渲染¶
遍历元素进行渲染:
- 微信搜索: 「 MinYiLife 」, 关注公众号!
- 本文链接: https://www.lesliezhu.com/blog/2024/01/02/vuejs_1/
- 版权声明: 原创文章,如需转载请注明文章作者和出处。谢谢!