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

    一 简介

    自定义指令:以V-开头的,扩展了HTML的语法,通过自定义指令可以操作DOM:

    栗子一:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <script src="vue2.2.js"></script>
        </head>
        <body>
        // 注册一个全局的自定义指令 <div id="app"> <div v-lang="color">{{num}}</div> <p><button @click="add">add</button></p> </div> </body> <script type="text/javascript"> Vue.directive('lang',function(el,binding){ //不用加V- console.log(el)//el指向的是当前实例绑定的对象<div v-lang="color">{{num}}</div> console.log(binding)//输出的是一个对象obj el.style='color:'+binding.value//binding.value就是color颜色red。 }) var vm = new Vue({ el:"#app", data:{ num:10, color:'red' }, methods:{ add:function(){ this.num++; } } }) </script> </html>

    栗子二:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
      //局部注册例子 <div id="app"> <p v-color="red">我是自定义指令</p> </div> <script src='vue.js'></script> <script> new Vue({ el:'#app', data:{ red:'red' }, directives: { color: { // 指令的定义 inserted: function (el,binding) { el.style.color = binding.value } } } }) </script> </body> </html>

    钩子函数的参数 (即 elbindingvnode 和 oldVnode):

    el: 指令所绑定的元素,可以用来直接操作DOM。

    binding: 一个对象,包含指令的很多信息。

    vnode: Vue编译生成的虚拟节点。

    oldVnode:上一个虚拟节点。

    二 钩子函数

    举栗:

    Vue.directive('lang',{
      bind:function () {
        console.log("1111"); //被绑定
      },
      inserted:function (el,binding) {
        el.style="color:"+binding.value;//绑定到节点
      },
      update:function () {
        console.log("3333");//组件更新
      },
      componentUpdated:function () {
        console.log("44444");//组件更新完成
      },
      unbind: function() {
        console.log('5555');//解绑
      }
    });

    一个指令定义对象可以提供如下几个钩子函数 (均为可选):

    • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

    • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

    • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。

    • componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。

    • unbind:只调用一次,指令与元素解绑时调用。

  • 相关阅读:
    oracle中Blob和Clob类型的区别
    为什么要分库分表
    Enable file editing in Visual Studio's debug mode
    SQL Server Dead Lock Log
    Debug .NET Framework Source
    SQL Server text field里面有换行符的时候copy到excel数据会散乱
    诊断和修复Web测试记录器(Web Test Recorder)问题
    Can't load Microsoft.ReportViewer.ProcessingObjectModel.dll
    'telnet' is not recognized as an internal or external command
    Linq to XML
  • 原文地址:https://www.cnblogs.com/1156063074hp/p/10167631.html
Copyright © 2011-2022 走看看