Vue基础进阶 之 自定义指令

时间:2023-03-09 17:20:31
Vue基础进阶 之 自定义指令

自定义指令-----钩子函数

自定义指令

除了内置指令,Vue也允许用户自定义指令;

注册指令:通过全局API Vue.directive可以注册自定义指令;

自定义指令的钩子函数: bind; inserted; update; componentUpdated; unbind;

自定义指令的使用:在自定指令的名称前加 上 v-;

自定义指令的详细介绍网址:https://cn.vuejs.org/v2/guide/custom-directive.html

下面是关于这个5个钩子函数的示例;

Vue基础进阶 之 自定义指令

vue代码:

    Vue.directive('demo',{
//指令的钩子函数
bind(){ alert("bind 首次绑定到元素的时候执行,它只执行一次,常用于初始化操作"); },
inserted(){
alert("inserted 插入到父节点之后,也就是DOM对象");
},
ubind(){ alert("ubind 解除绑定");
},
update(){ alert("update 绑定该指令的元素 所在的VUE实例挂载的DOM树 发生更新时调用"+"username="+vm.$refs.username.textContent);
},
componentUpdated(){ alert("componentUpdated 更新后调用"+"username="+vm.$refs.username.textContent); } }) let vm= new Vue({
data:{
username:'perfect',
flag:true }
}).$mount('div');

html:

<div>
<input type="text" v-model="username" /><br />
用户名:<span v-demo ref='username'>{{username}}</span><br />
信息:<span v-if="flag">欢迎来到perfect*的博客园!!!</span>
<button @click="flag=!flag">解除绑定</button> </div>

自定义指令钩子函数总的代码:

 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 09_自定义指令钩子函数</title>
<script type="text/javascript" src="../js/vue.js" ></script> </head>
<body>
<div>
<input type="text" v-model="username" /><br />
用户名:<span v-demo ref='username'>{{username}}</span><br />
信息:<span v-if="flag">欢迎来到perfect*的博客园!!!</span>
<button @click="flag=!flag">解除绑定</button> </div>
</body> <script>
Vue.directive('demo',{
//指令的钩子函数
bind(){ alert("bind 首次绑定到元素的时候执行,它只执行一次,常用于初始化操作"); },
inserted(){
alert("inserted 插入到父节点之后,也就是DOM对象");
},
ubind(){ alert("ubind 解除绑定");
},
update(){ alert("update 绑定该指令的元素 所在的VUE实例挂载的DOM树 发生更新时调用"+"username="+vm.$refs.username.textContent);
},
componentUpdated(){ alert("componentUpdated 更新后调用"+"username="+vm.$refs.username.textContent); } }) let vm= new Vue({
data:{
username:'perfect',
flag:true }
}).$mount('div'); </script>
</html>

自定义指令钩子函数

自定义指令-----钩子函数的参数

自定义指令的钩子函数参数:自定义指令的钩子函数可以传递4个参数,分别是el、binding、vnode、oldVnode;

具体描述见官网API:点击我进入

el:获取DOM对象;

binding:一个包含很多属性的对象;

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

oldVnode:上一个虚拟节点

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

示例:

Vue基础进阶 之 自定义指令

Vue基础进阶 之 自定义指令

binding;

示例:

Vue基础进阶 之 自定义指令

binding属性的代码:

Vue.directive('demo',{
//指令的钩子函数
bind(el,binding){
// console.log(el);
// el.style.color='red'; console.log(binding.name);//指令名
console.log(binding.value);//指令的绑定值
console.log(binding.expression);//字符串形式的指令表达式
console.log(binding.arg);//传给指令的参数,可选 console.log(binding.modifiers);//一个包含修饰符的对象 if(binding.arg==='click'){ console.log("执行了点击事件!!!");
}
if(binding.modifiers.once){ console.log("只执行一次!!!");
} }, update(el,binding){
console.log("update value="+binding.value);
console.log("update oldvalue="+binding.oldValue); }, }) let vm= new Vue({
data:{
username:'perfect',
flag:true }
}).$mount('div');

binding中使用到HTML代码:

    <div>
<input type="text" v-model="username" /><br />
用户名:<span v-demo:click.once.stop='username' ref='username'>{{username}}</span><br />
信息:<span v-if="flag">欢迎来到perfect*的博客园!!!</span>
<button v-on:click="flag=!flag">解除绑定</button> </div>
 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 10_自定义指令钩子函数的参数</title>
<script type="text/javascript" src="../js/vue.js" ></script> </head>
<body>
<div>
<input type="text" v-model="username" /><br />
用户名:<span v-demo:click.once.stop='username' ref='username'>{{username}}</span><br />
信息:<span v-if="flag">欢迎来到perfect*的博客园!!!</span>
<button v-on:click="flag=!flag">解除绑定</button> </div>
</body> <script>
Vue.directive('demo',{
//指令的钩子函数
bind(el,binding){
// console.log(el);
// el.style.color='red'; console.log(binding.name);//指令名
console.log(binding.value);//指令的绑定值
console.log(binding.expression);//字符串形式的指令表达式
console.log(binding.arg);//传给指令的参数,可选 console.log(binding.modifiers);//一个包含修饰符的对象 if(binding.arg==='click'){ console.log("执行了点击事件!!!");
}
if(binding.modifiers.once){ console.log("只执行一次!!!");
} }, update(el,binding){
console.log("update value="+binding.value);
console.log("update oldvalue="+binding.oldValue); }, }) let vm= new Vue({
data:{
username:'perfect',
flag:true }
}).$mount('div'); </script>
</html>

自定义指令钩子函数的参数

自定义指令简写与局部自定义指令

Vue基础进阶 之 自定义指令

vue代码:

<script>
Vue.directive('demo',function(){//自定义指令的简写
alert(); }); let vm= new Vue({
data:{
username:'perfect',
flag:true },
directives:{//自定义指令的局部定义
font_style:function(el,binding){
el.style.color=binding.arg; },
focus:{
inserted(el){
console.log(el);
el.focus();//聚焦到输入文本框中
}
}
}, }).$mount('div'); </script>

html:

<div>
<input type="text" v-model="username" v-focus /><br />
用户名:<span v-demo v-font_style:red>{{username}}</span><br /> <button v-on:click="flag=!flag">解除绑定</button> </div>
 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>11_自定义指令</title>
<script type="text/javascript" src="../js/vue.js" ></script> </head>
<body>
<div>
<input type="text" v-model="username" v-focus /><br />
用户名:<span v-demo v-font_style:red>{{username}}</span><br /> <button v-on:click="flag=!flag">解除绑定</button> </div>
</body> <script>
Vue.directive('demo',function(){//自定义指令的简写
alert(); }); let vm= new Vue({
data:{
username:'perfect',
flag:true },
directives:{//自定义指令的局部定义
font_style:function(el,binding){
el.style.color=binding.arg; },
focus:{
inserted(el){
console.log(el);
el.focus();//聚焦到输入文本框中
}
}
}, }).$mount('div'); </script>
</html>

自定义指令简写与局部自定义指令