Vue 自定义全局指令和局部指令demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <p v-upper-text="message"></p> 自定义选中焦点 <input type="text" v-focus> </div> <script src="./node_modules/vue/dist/vue.js"></script> <script> //注册全局自定义指令,可以在多个Vue管理的入口下使用该指令 //第一个参数是指令名 Vue.directive('upper-text',{ bind:function(el){ console.log("bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。"); el.style.color="red" }, //一般对js操作在inserted中,只调用一次 //el是当前指令作用的那个Dom元素 //binding用于获取使用了当前指令的绑定值(value)、表达式(expression)、指令名(name)等 inserted:function(el,binding){ console.log("inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。") //将所有字母文本内容转换为大写 el.innerHTML=binding.value.toUpperCase() }, update:function(el,binding){ console.log("update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。"); }, componentUpdated:function(){ console.log("componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。") }, unbind:function(){ console.log("unbind:只调用一次,指令与元素解绑时调用。"); } }) new Vue({ el:"#app", data:{ message:'hello word' }, //注册局部自定义指令,只能在当前Vue管理中使用 directives: { 'focus':{ //指令名 //刷新页码自动获取焦点 inserted:function(el,binding){ el.focus(); } } } }) </script> </body> </html>