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();
    }
});