🌑 Vue 指令
# 内置指令 v-*
已经提到过的内置指令:
v-bind:单向绑定解析表达式,可简写为
:;v-model:双向数据绑定;
v-for:遍历数组 / 对象 / 字符串;
v-on:绑定事件监听,可简写为
@;v-if:条件渲染(动态控制节点是否存存在)
v-else:条件渲染(动态控制节点是否存存在)
v-show:条件渲染(动态控制节点是否展示)
v-text :向其所在的节点中渲染文本内容;
(与插值语法的区别: v-text 会替换掉节点中的内容, 插值语法则不会)
v-html :与 v-text 相似,但是 v-html 可以支持结构的解析渲染(文本内容可以包含 HTML 标签);
(⚠️:安全性问题: 在网站上任意渲染 HTML 内容非常危险,容易导致 XSS 攻击;一定要在可信的内容上使用 v-html ,永远不要使用在用户可提交的内容中)
v-cloak : 一个特殊的没有值的属性,Vue 实例创建完毕并且接管容器后会删掉 v-cloak 属性;所以可以使用 CSS 配合 v-cloak 解决网速慢网页延迟显示未经渲染的 Vue 内容问题。
v-once :一个特殊的没有值的属性,在 v-once 所在的节点在初次渲染之后就视为静态内容。(只会被渲染一次)之后数据的改变不会引起 v-once 属性所在的结构更新,可用于优化性能。(区别开事件中的 once 特性)
v-pre :一个特殊的没有值的属性,可以让 Vue 跳过 v-pre 属性所在节点的编译过程。可利用它跳过:没有使用指令语法、没有使用插值语法的节点,会加快容器中内容的编译。
# 自定义指令
使用 new Vue({directives: {...}}) 配置自定义指令,
⚠️:原理不靠返回的值。
# 函数式
语法: new Vue({directives: { 指令名(){ … } }})
# 对象
语法: new Vue({directives: {指令名:{配置对象...}}}) ;
常用的三个回调函数:
bind:指令与元素成功绑定时调用;inserted:指令所在元素被插入页面时调用;update:指令所在模版结构被重新解析时调用;
其他问题注意:
指令定义时不加
v-,使用时需要加v-指令名称使用多个名字时要用
-分隔开来(kebab-cab 命名),在directives中定义该指令时要使用字符串的形式word-word(){};指令中回调函数的
this问题:不论是函数式还是对象式,this都会指向window对象。全局指令使用
Vue.directive('xxx', function(element, binding){})或者Vue.directive(‘xxx’, { xxx })配置。
