好家伙,

1.什么是自定义指令?

vue官方提供了v-text,v-for,v-model,v-if等常用的指令。除此之外vue还允许开发者自定义指令。

2.自定义指令的分类

vue中的自定义指令分为两类,分别是:

~私有自定义指令

~全局自定义指令

3,私有自定义指令

在每个vue组件中,可以再directives节点下声明私有自定义指令,示例代码如下:

需求来了:

非常简单,我要去改h1标签的颜色,怎么改?

3.1.我们来试着自定义一个自定义指令:

在App.vue组件中:

<h1 v-color>App根组件</h1>

对v-color指令进行配置:

//私有自定义指令的节点
directives:{
//定义一个名字为color的的指令,指向一个配置对象
color:{}
},

这里我们会用到bind函数

directives:{
//定义一个名字为color的的指令,指向一个配置对象
color:{
//当当指令第一次被绑定到元素上的时候,会立即触发bind函数
//形参中的el表示当前指令所绑定到的那个DOM对象
bind:function(el){
console.log('我被触发了')
el.style.color='red'
}
}
},

于是我们一进页面就可以看到一个红色的h1

3.2.我们还有另外的写法:

<h1 v-color="color">App根组件2</h1>

来进行配置:

data(){
return{
comName:'Left',
color:'blue'
}
}, directives:{ color:{
//el拿到,
bind:function(el,binding){
console.log('我被触发了')
console.log(binding)
el.style.color = binding.value
}
}
},

来看看看binding里面的是些啥

所以binding拿到的是color

所以我们可以通过:

el.style.color = binding.value

去改h1的颜色

3.3.两者的不同之处

 <h1 v-color="color">App根组件</h1>
<h1 v-color="'red'">App根组件2</h1>

去浏览器里面看看binding里的是啥

 可以看到'red'只是一个表达式

4.update函数:

bind函数只调用一次:

单指令第一次绑定到元素时调用,当DOM更新是bind函数不会触发.

update函数会在每次DOM更新时被调用.

我们又又又来尝试一下:

来实现一个按钮点击改颜色

例子如下:

<template>
<div>
<h1 v-color>App根组件</h1>
<h1 v-color="color">App根组件2</h1>
<h1 v-color="'red'">App根组件3</h1>
<button @click="color='green'">改变颜色</button> </div>
</template> <script>
//1.导入需要的组件
import Left from './components/Left.vue'
import Right from './components/Right.vue'
import Article from './components/Article.vue' export default {
data(){
return{
comName:'Left',
color:'blue'
}
},
//私有自定义指令的节点
directives:{
//定义一个名字为color的的指令,指向一个配置对象
color:{
//当当指令第一次被绑定到元素上的时候,会立即触发bind函数
//形参中的el表示当前指令所绑定到的那个DOM对象
bind:function(el,binding){
console.log('被触发了bind函数')
console.log(binding)
el.style.color = binding.value
},
//在DOM更新的时候,会触发update函数
update(el,binding){
console.log('被触发了update函数')
console.log(binding)
el.style.color = binding.value }
}
}, }
</script>

 嗯,搞定

5.简写

如果bind和update函数中的逻辑完全相同,则对象格式的自定义指令可以简写成函数形式:

directives:{
//定义一个名字为color的的指令,指向一个配置对象
// color:{
// //当当指令第一次被绑定到元素上的时候,会立即触发bind函数
// //形参中的el表示当前指令所绑定到的那个DOM对象
// bind:function(el,binding){
// console.log('被触发了bind函数')
// console.log(binding)
// el.style.color = binding.value
// },
// //在DOM更新的时候,会触发update函数
// update(el,binding){
// console.log('被触发了update函数')
// console.log(binding)
// el.style.color = binding.value // }
// }
color(el,binding){
el.style.color = binding.value
}
},

下方为缩写(妙啊)

6.注册全局自定义指令

 
我们来到main.js中
Vue.directive('color',function(el,binding){
el.style.color = binding.value
})

搞定

That's all

 

最新文章

  1. 16-1-27---图解HTTP(02)
  2. jQuery实现长按按钮触发事件的方法
  3. git drupal eclipse
  4. UVA 1349(二分图匹配)
  5. Asp.net MVC 中超链接的三个方法及比较
  6. UVA 11383 Golden Tiger Claw(最佳二分图完美匹配)
  7. apache vhost 访问权限配置
  8. hdu3081 Marriage Match II(最大流)
  9. MySql实现分页查询的SQL,mysql实现分页查询的sql语句 (转)
  10. jvm内存快照dump文件太大,怎么分析
  11. window下切换python
  12. KMP算法理解(转)
  13. 拯救U盘之——轻松修复U盘“无法访问”的故障
  14. ubuntu 下 go 语言调试器 dlv 的安装
  15. Exp1 PC平台逆向破解(5)M
  16. Redis和MySQL数据一致中出现的几种情况
  17. jQuery实现复选框 全选、反选、全不选
  18. ajax方法XHR.readyState五种状态与示例
  19. 自己搭建IntelliJ IDEA授权服务器
  20. [Algorithms] Graph Traversal (BFS and DFS)

热门文章

  1. 国内外组态软件对比分析(InTouch、WinCC、iFix、iNeuOS)
  2. Canal搭建
  3. Maven的安装 和idea的配置
  4. UiPath培训教程
  5. 常见的git命令和git-&gt;github错误
  6. NC53681 「土」巨石滚滚
  7. Tapdata 在“疫”线:携手张家港市卫健委争分夺秒实时抗疫
  8. linux 配置集群需要修改的东西
  9. C++学习日记:关于我决定开始学习C++的那些事
  10. 【黄啊码】MySQL入门—3、我用select *,老板直接赶我坐火车回家去,买的还是站票