Javascript 在vuejs2的vnode上下文中销毁监视
在指令绑定方法中,有一个Javascript 在vuejs2的vnode上下文中销毁监视,javascript,vuejs2,vue-directives,Javascript,Vuejs2,Vue Directives,在指令绑定方法中,有一个vnode.context.$watch,每次将该指令添加到HTML中时,它也会将另一个观察程序与前一个观察程序一起添加。正因为如此,同样的观察者不止一次地打电话 在调用指令unbind方法时,是否有任何方法可以销毁以前的观察程序 Vue.directive("dynamic-lookup", { bind: function (el, binding, vnode) { let dependency = setValue("dyn
vnode.context.$watch
,每次将该指令添加到HTML中时,它也会将另一个观察程序与前一个观察程序一起添加。正因为如此,同样的观察者不止一次地打电话
在调用指令unbind方法时,是否有任何方法可以销毁以前的观察程序
Vue.directive("dynamic-lookup", {
bind: function (el, binding, vnode) {
let dependency = setValue("dynamic-lookup-dependency");
if (dependency) {
vnode.context.$watch(dependency, function (newVal, oldVal) { }); });
}
},
unbind: function(el, binding, vnode) {
console.log("unbind");
}
});
我想你可以在需要的时候解除依赖 Documentation
vm.$watch
返回一个unwatch函数,该函数停止启动回调:
根据,$watch
函数自身返回unwatch函数。您可以将返回的函数保存在vnode.context
中,并在指令unbind hook中调用此函数,如下所示:
Vue.directive("dynamic-lookup", {
bind: function (el, binding, vnode) {
let unwatch = vnode.context.$watch(vnode.context.property, function (newVal, oldVal) {
//Do something
});
});
if(!vnode.context['unwatch'])
vnode.context['unwatch'] = unwatch;
},
unbind: function(el, binding, vnode) {
vnode.context.unwatch();
}
});
有没有办法在unbind方法中调用unwatch?也许可以尝试以下方法:this.unbind.unwatchDependency=。。。;在unbind中:this.unwatchDependency();
Vue.directive("dynamic-lookup", {
bind: function (el, binding, vnode) {
let unwatch = vnode.context.$watch(vnode.context.property, function (newVal, oldVal) {
//Do something
});
});
if(!vnode.context['unwatch'])
vnode.context['unwatch'] = unwatch;
},
unbind: function(el, binding, vnode) {
vnode.context.unwatch();
}
});