详解vue中v-bind:style效果的自定义指令

2020-06-16 06:36:04易采站长站整理
arg:传给指令的参数,可选。

例如

v-my-directive:foo
中,参数为
"foo"

modifiers
:一个包含修饰符的对象。例如:
v-my-directive.foo.bar
中,修饰符对象为
{ foo: true, bar: true }
vnode
:Vue 编译生成的虚拟节点。

oldVnode
:上一个虚拟节点,仅在
update
componentUpdated
钩子中可用。

除了

el
之外,其它参数都应该是只读的,切勿进行修改。如果需要在钩子之间共享数据,建议通过元素的
dataset
来进行。

下面我们来分析几个简单的钩子函数,及其参数

代码如下:(看完代码我再将其)


<div id="app">
<span v-mmm='{color:color, fontSize:"20px"}'>bind的对象形式</span>
<br>
<button @click='changeStyle'>改变颜色</button>
</div>

<script>
const vm = new Vue({
el: '#app',
data: {
color: 'cyan',
style1: {color: 'lightblue'},
style2: {fontSize:"20px"}
},
directives: {
mmm: {
bind(el,binding) {
// binding.value = {color:color, fontSize:"20px"}
if(binding.value.constructor === Object) {
Object.keys(binding.value).forEach(key => {
el.style[key] = binding.value[key];
})
}
}
}
},
methods: {
changeStyle() {
this.color = 'lightpink'
}
},
})
</script>

效果图:

下面我们换成

update
钩子函数:


update(el,binding) {
// binding.value = {color:color, fontSize:"20px"}
if(binding.value.constructor === Object) {
Object.keys(binding.value).forEach(key => {
el.style[key] = binding.value[key];
})
}
}

效果图:

当我们点击按钮后:

我们发现他会随着数据改变而更新,但是他刚开始不会调用它,只有当数据发生改变之后才会调用该钩子函数