找出 Vue.js 深度自定义指令中哪个属性发生了变化
Find out which property changed in a Vue.js deep custom directive?
我有一个带有深度自定义指令的 Vue,响应v.item
的变化:
JSFiddle
<div id='testdiv' v-demo="item">
<div>
{{item.name}}
</div>
<div>
{{item.place}}
</div>
</div>
Vue.directive('demo', {
deep: true
,
bind: function() {
console.log('demo bound');
}
, update: function(newvalue,oldvalue) {
console.log(newvalue,oldvalue);
}
});
v=new Vue({
el:'#testdiv'
, data:function(){
return {
item: {
name : "John Smith"
, place : "Amsterdam"
}
};
}
});
这是有效的。例如,当我在控制台中更改 v.item.place
的值时,会触发指令,但在 update
事件中oldvalue
和newvalue
相同。
我需要一种方法来找出哪个属性已更改。
知道吗?
每当项发生更改时,都可以使用计算属性创建新对象,然后在指令中使用此计算对象:
computed: {
_item () {
return Object.assign({}, this.item)
},
},
<div id='testdiv' v-demo="_item">
<div>
{{item.name}}
</div>
<div>
{{item.place}}
</div>
</div>
其他解决方案是将项目存储在HTML元素(由指令提供)中,然后在更新钩子中执行手动比较,如下所示:
function update(el, { value }) {
if (JSON.stringify(el.__item) === JSON.stringify(value)) {
return
}
bind(el, { value })
}
相关文章:
- 为什么属性存在于对象实例上,即使其原型发生了更改
- Javascript函数 - 通过引用复制,但这里发生了什么
- 套接字发生了什么's在'断开连接'事件(服务器端)
- 这段代码中发生了什么
- Wamp没有识别出我的代码发生了更改
- 如何检查输入框值在使用淘汰之前是否发生了更改
- 通过它访问HTML元素's id DIRECTLY-这里发生了什么
- window.opener引用在Java 1.7.0_04-b20中从Applet重定向期间发生了更改,但在1.7.0_
- 如何知道JS对象属性的值在哪一行发生了更改
- 查找表单的哪些特定部分在输入时发生了更改
- JavaScript's数组过滤器函数在没有分配函数的情况下使用-这里发生了什么
- 起重行为在铬 48 和 49 之间发生了变化
- 这个JavaScript函数中发生了什么
- 我的输入字段听到除回车之外的每个“键下”事件.我有一个日期选择器,不确定发生了什么
- isPrototypeOf 说不,但实例说是——发生了什么
- 找出 Vue.js 深度自定义指令中哪个属性发生了变化
- 构造函数的属性发生了什么变化
- Javascript纯对象:这个属性发生了什么?
- JavaScript闭包上下文的其他属性发生了什么
- 如何知道哪个对象属性发生了更改