zoukankan      html  css  js  c++  java
  • vue之自定义指令

    1、自定义指令的作用

      除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令。注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件。然而,有的情况下,你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。

    参考文档:https://cn.vuejs.org/v2/guide/custom-directive.html

    2、注册自定义指令

    (1)注册全局自定义指令

      Vue.directive("指令名称", {
          inserted: function (el, binding) {
            // el 代表使用了此指令的那个 DOM 元素    
            // binding 可获取使用了此指令的绑定值 等
            
            //逻辑代码
    
          }
        }
      );

    (2)注册局部指令

    directives:{
          "指令名称":{
            inserted:function (el,binging) {
              //逻辑代码
            }
          }
        }

    注意:

    • 注册时,指令名称前不要带 v-,因为内部处理会自动加上v-。
    • 指令名称中间不要有大写字母,开头可以出现大写字母

    (3)使用自定义指令

    • 引用指令时,指令名前面加上 v-
    • 直接在元素上在使用即可 :v-指令名='表达式'

    3、案例演示

      当页面加载时,该元素将获得焦点 (注意:autofocus 在移动版 Safari 上不工作)。事实上,只要你在打开这个页面后还没点击过任何内容,这个输入框就应当还是处于聚焦状态。现在让我们用指令来实现这个功能:

    (1)全局指令实现

    <div id="app">
        自动获取焦点:<input type="text" v-auto-focus>
    </div>
    
    <script>
        //全局指令
      Vue.directive("auto-focus", {
          inserted: function (el, binding) {
            // el 代表使用了此指令的那个 DOM 元素
            // binding 可获取使用了此指令的绑定值 等
            el.focus()
    
          }
        }
      );

    (2)局部指令实现

    <div id="app">
        自动获取焦点:<input type="text" v-focus>
    </div>
    
    <script>
      new Vue({
        el: "#app",
        data: {},
    //只在当前Vue实例中生效 directives:{ "focus":{ inserted:function (el,binging) { //逻辑代码 el.focus() } } } }) </script>

    4、钩子函数

    在上面使用了钩子函数inserted,实际上还有其它常用的钩子函数:

    bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
    
    inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
    
    update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新。

    常用钩子函数的参数:

    • el:指令所绑定的元素,可以用来直接操作 DOM 。
    • binding:一个对象,包含以下属性:   name:指令名,不包括 v- 前缀。   value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2。

    实例:

    <div id="app">
    
        <p v-get-values="msg"></p> //data中声明
    
    </div>
    
    <script>
    
      Vue.directive("get-values", {
    
        //样式不需要元素插入到DOM中,类似于link中的css引入一样
    
          bind: function (el) {
            el.style.color = "green"
          },
    
        inserted: function (el, binding) {
          // el 代表使用了此指令的 DOM 元素
          // binding 获取使用了此指令的绑定值 
          el.innerHTML = binding.value
    
        }
      });
  • 相关阅读:
    JavaScript入门知识点整理
    正则表达式
    bootstrap css编码规范
    JavaScript高级编程(学习笔记)
    【 D3.js 选择集与数据详解 — 2 】 使用data()绑定数据
    bootstrap table:JQuery中each方法绑定blur事件监听input输入是否合法,进入死循环
    bootstrap-table中导出excel插件bootstrap-table-export使用
    托业考后感
    《Pride and Prejudice》英文版读后记忆
    迷茫的当下,我在做什么
  • 原文地址:https://www.cnblogs.com/shenjianping/p/11315832.html
Copyright © 2011-2022 走看看