指令

Misaka10032指令自定义指令大约 3 分钟

数据绑定 v-bind 及其简写、事件处理 v-on 及其简写@都是 Vue 指令的一部分。

常用内置指令

1.v-text : 更新元素的 textContent

与插值语法的区别:v-text 会替换节点中的内容,{{x}}不会

2.v-html : 更新元素的 innerHTML

与插值语法的区别:

v-html 会替换掉节点中所有内容,{{x}}不会。v-html 可以识别 html 结构。

严重注意:v-html 有安全性问题!

在网站上动态渲染任意 html 是非常危险的,容易导致 XSS 攻击。

一定要在可信的内容上使用 v-html,不要用在用户提交的内容上。

3.v-if : 如果为 true, 当前标签才会输出到页面

4.v-else: 如果为 false, 当前标签才会输出到页面

5.v-show : 通过控制 display 样式来控制显示/隐藏

6.v-for : 遍历数组/对象

7.v-on : 绑定事件监听, 一般简写为@

8.v-bind : 绑定解析表达式, 可以省略 v-bind

9.v-model : 双向数据绑定

10.v-cloak : 防止闪现, 与 css 配合: [v-cloak] { display: none }(在 CSS 中写)

1.本质是一个特殊属性,Vue 实例创建完毕接管容器后,会删掉 v-cloak 属性。

2.使用 css 配合 v-cloak 可以解决网速慢时页面展示出{{xxx}}的问题。

11.v-once:初次动态渲染后视为静态内容

以后数据的改变不会引起 v-once 所在结构的更新,用于优化性能。

12.v-pre:跳过其所在节点的编译过程

可利用该指令跳过没有使用指令语法、没有使用插值语法的节点,加快编译。

自定义指令

例:v-big:指令与元素成功绑定时/指令所在的模板被重新解析时。

1.在 directives 属性中写入 big(element, binding){} 函数,随页面渲染自动调用。

2.绑入多个元素,元素都重新解析更新,函数会重复调用。

自定义指令写为对象形式,可插入三个函数方法:bind、inserted、update。分别在指令与元素成功绑定时、指令所在元素被插入页面时、指令所在模板被重新解析时触发。

语法

(1)局部指令:new Vue({ directives: { 指令明: 配置对象}})new Vue({ directives() { } })

(2)全局指令:Vue.directive(指令名,配置对象)Vue.directive(指令名,回调函数)

回调

bind:指令与元素成功绑定时调用

inserted:指令所在元素被插入页面时调用

update:指令所在模板结构重新解析时调用

备注

1.指令定义时不加 v-,但使用时要加 v-

2.指令名如果是多个单词,要使用 kebab-case 命名方式,不要用 camelCase 命名。

以下为 v-directive 代码示例,click 点击后绑定了 v-color 的元素字体变红切换

<template>
  <div id="app">
    <button @click="onclick">Hello</button>
    <div v-color="color">哈哈哈</div>
  </div>
</template>

<script>
export default {
  data: () => {
    return {
      color: null,
    };
  },
  methods: {
    onclick() {
      this.color = this.color ? null : "red";
    },
  },
  directives: {
    color: {
      inserted(el) {
        el.style.display = "block";
      },
      update(el, binding) {
        el.style.color = binding.value;
      },
    },
  },
};
</script>