Vue.js
从版本1.x
到版本3.x
,官方代码案例和推荐使用都是模板语法,那么本篇文章我们也根据官方的推荐,来了解一下模板语法是怎么一回事。
我们可以把 Vue.js
的模板语法,直接理解为 HTML
语法的一种扩展,它所有的模板节点声明、属性设置和事件注册等都是按照 HTML
的语法来进行扩展设计的。按照官方的说法就是“所有的 Vue
模板都是语法层面合法的 HTML
,可以被符合规范的浏览器和 HTML
解析器解析”。
Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上
使用 v-tex
t指令,将数据采用纯文本方式填充其空元素中
// 组合式
在元素中的某一位置采用纯文本的方式渲染数据
// 组合式
这是一个 DIV 元素,{{ student.name }},{{ student.desc }}
使用 v-html
指令,将数据采用 HTML
语法填充其空元素中
// 组合式
v-model
双向数据绑定指令,视图数据和数据源同步
一般情况下 v-model
指令用在表单元素中:
和
元素会绑定 value
属性并侦听 input
事件
和
会绑定 checked
属性并侦听 change
事件
会绑定 value
属性并侦听 change
事件// 组合式
灯
是否确定
篮球 足球 羽毛球 乒乓球
男 女
证书等级:
去过的城市:
修饰符 | 作用 | 示例 |
---|---|---|
.number | 自动将用户的输入值转为数值类型 |
|
.trim | 自动过滤用户输入的首尾空白字符 |
|
.lazy | 在 chang 时而非 input 时更新 |
|
// 组合式
将用户输入的值转成数值 .number,懒更新 .lazy
去掉首尾空白字符
v-bind:
指令null
或者 undefined
,那么该属性将会从渲染的元素上移除v-bind
非常常用,我们提供了特定的简写语法:// 组合式
![]()
![]()
直接使用 v-bind
来为元素绑定多个属性及其值
// 组合式
渲染结果:
class
和 style
可以和其他属性一样使用 v-bind
将它们和动态的字符串绑定;但是,在处理比较复杂的绑定时,通过拼接生成字符串是麻烦且易出错的;因此, Vue
专门为 class
和 style
的 v-bind
用法提供了特殊的功能增强;除了字符串外,表达式的值也可以是对象或数组。
绑定对象
// 组合式
error flat
胶囊 块
绑定数组
// 组合式
error flat
胶囊 块
绑定对象
// 组合式
背景色:文本色:
背景色:文本色:边框圆角:
绑定数组
还可以给 :style
绑定一个包含多个样式对象的数组,这些对象会被合并后渲染到同一元素上
// 组合式
背景色:文本色:胶囊:
背景色:文本色:胶囊:
v-if
指令用于条件性地渲染元素;该内容只会在指令的表达式返回真值时才被渲染v-else-if
提供的是相应于 v-if
的 else if
区块,它可以连续多次重复使用v-else
为 v-if
添加一个 else
区块v-else
和 v-else-if
指令必须配合 v-if
指令一起使用 ,否则它将不会被识别,而且语句块中间不能出现无关其他元素v-if
支持在
元素上使用,这只是一个不可见的包装器元素,最后渲染的结果并不会包含这个
元素// 组合式
是否显示:这是一个普通的标题标签
年龄: {{ age }}未成年
青年
中年
老年
周几: {{ week }}可以游泳
不可以游泳
v-show
按条件显示一个元素的指令v-show
会在 DOM
渲染中保留该元素v-show
仅切换了该元素上名为 display
的 CSS
属性v-show
不支持在
元素上使用,也不能和 v-else
搭配使用// 组合式
是否显示:这是一个普通的标题标签
年龄: {{ age }}未成年
= 18 && age < 35">青年
= 35 && age < 50">中年
= 50">老年
周几: {{ week }}
v-if
是“真实的”按条件渲染,因为它确保了在切换时,条件区块内的事件监听器和子组件都会被销毁与重建v-if
也是惰性的:如果在初次渲染时条件值为 false
,则不会做任何事;条件区块只有当条件首次变为 true
时才被渲染v-show
元素无论初始条件如何,始终会被渲染,只有 CSS display
属性会被切换v-if
有更高的切换开销,而 v-show
有更高的初始渲染开销;如果需要频繁切换,则使用 v-show
较好;如果在运行时绑定条件很少改变,则 v-if
会更合适我们可以使用 v-on:
指令 (简写为@) 来监听 DOM
事件,并在事件触发时执行对应的 JavaScript
用法:v-on:click=""
或 @click=""
用法:
// 组合式
当前音量:{{ volume }}
事件修饰符 | 说明 |
---|---|
.prevent | 阻止默认行为 |
.stop | 阻止事件冒泡 |
.capture | 以捕获模式触发当前的事件处理函数 |
.once | 绑定的事件只触发1次 |
.self | 只有在event.target是当前元素自身时触发事件处理函数 |
.passive | 向浏览器表明了不想阻止事件的默认行为 |
.prevent
:阻止该事件的默认行为
// 组合式
百度
.stop
:阻止事件产生的冒泡现象
// 组合式
.once
:绑定的事件只触发 1
次
// 组合式
.self
:只有在 event.target
是当前元素自身时触发事件处理函数
// 组合式
.capture
给元素添加一个监听器
// 组合式
.passive
:不阻止事件的默认行为,与 .prevent
不要同时使用
// 组合式
百度
按键别名:.enter
、.tab
、.esc
、.space
、.up
、.down
、.left
、.right
、.delete
(捕获 Delete
和 Backspace
两个按键)
系统修饰符:.ctrl
、.alt
、.shift
、.meta
准确的修饰符:.exact
// 组合式
按下的键中包含 Enter 键事件:
按下的键中包含 Shift Enter 键事件:
按下的键只有 Shift Enter 键事件:
鼠标按键修饰符:.left
、.right
、.middle
// 组合式
使用 v-for
指令基于一个数组来渲染一个列表
语法:
in
前一个参数:item in items
item
:值items
:需要循环的数组in
前两个参数:(value, index) in items
value
:值index
:索引items
:需要循环的数组// 组合式
v-for 渲染数组, v-for="item in itmes"
- 编号:{{ sub.id }} --- 名称:{{ sub.name }}
v-for 渲染数组, v-for="{ 解构…… } in itmes"
- 编号:{{ id }} --- 名称:{{ name }}
v-for 渲染数组, v-for="(value, index) in itmes"
- 编号:{{ sub.id }} --- 名称:{{ sub.name }} --- 索引:{{ index }}
v-for 渲染数组, v-for="({ 解构…… }, index) in itmes"
- 编号:{{ id }} --- 名称:{{ name }} --- 索引:{{ index }}
使用 v-for
来遍历一个对象的所有属性,遍历的顺序会基于对该对象调用 Object.keys()
的返回值来决定
语法:
in
前一个参数:value in object
value
:属性值items
:需要循环的对象in
前两个参数:(value, name) in object
value
:属性值name
:键items
:需要循环的对象in
前三个参数:(value, name, index) in object
value
:属性值name
:键index
:索引items
:需要循环的对象// 组合式
v-for 渲染对象, v-for="value in object"
- {{ value }}
v-for 渲染对象, v-for="(value, name) in object"
- 属性名:{{ name }} --- 属性值: {{ value }}
v-for 渲染对象, v-for="(value, name, index) in object"
- 属性名:{{ name }} --- 属性值: {{ value }} --- 索引:{{ index }}
当列表的数据变化时,默认情况下,vue
会尽可能的复用已存在的 DOM
元素,从而提升渲染的性能;但这种默认的性能优化策略,会导致有状态的列表无法被正确更新。
为了给 vue
一个提示,以便它能跟踪每个节点的身份,从而在保证有状态的列表被正确更新的前提下,提升渲染的性能;此时,需要为每项提供一个唯一的key属性:
key
的注意事项:
key
的类型只能是 Number/String
key
值必须具有唯一性key
(该属性的值在此列表中唯一)key
v-for
指令时一定要指定 key
的值// 组合式
不使用key值
- {{ sub }}
使用索引当key值
- {{ sub }}
使用列表属性当key值(该属性必须再此列表中唯一)
- {{ sub }}
欢迎大家加入我的社区,在社区中会不定时发布一些精选内容:https://bbs.csdn.net/forums/db95ba6b828b43ababd4ee5e41e8d251?category=10003
以上就是 Vue3 中的模板语法,不懂得也可以在评论区里问我或私聊我询问,以后会持续发布一些新的功能,敬请关注。
我的其他文章:https://blog.csdn.net/weixin_62897746?type=blog
上一篇:Android面试题——JVM