vue.js怎样移除绑定的点击事件?

使用v-on:click绑定的事件如何移除

阅读 39.5k
7 个回答

现在我的处理方式是:

   <p @click="flag && clickEvent()"></p> 

加上一个标志位来控制点击事件是否能触发.

vm.$off( [event, callback] )

vm.$off( [event, callback] )

Arguments:

{String} [event]
{Function} [callback]
Usage:

Remove event listener(s).

If no arguments are provided, remove all event listeners;

If only the event is provided, remove all listeners for that event;

If both event and callback are given, remove the listener for that specific callback only.

vm.$off( [event, callback] )

参数:

{String} [event]
{Function} [callback]
用法:

删除事件监听器。

如果没有参数,则删除所有的事件监听器;

如果只提供了事件,则删除这个事件所有的监听器;

如果同时提供了事件与回调,则只删除这个回调。

http://cn.vuejs.org/api/#vm-off

上述方法没有办法,解除dom上直接绑定的事件,

可以多设置一个变量,来搞定,如果为true,直接return,不执行。 其他办法再想想。

我也有同样的疑问,但是发现文档和网上都找不到答案,貌似没有提供解绑函数,
最后采用了v-if解决:
<button v-if="!unbind" v-on:click="addClick">点击</button>
<button v-else >点击</button>

然后在data里添加unbind=false属性,需要解绑的时候将其设置为true

angular中只要把$scope.addClick重新赋值就可以了,你也可以试试动态绑定组件的方法吧,

if(flag){
    vm.addClick = ()=>{
        //写操作
    }
}else{
    vm.addClick = ()=>{
        //只是个空方法
    }
}

官网上说到事件处理的时候提到:

为什么在 HTML 中监听事件?
下面的原因里面有3点,最后一点说的是

当一个 ViewModel 被销毁时,所有的事件处理器都会自动被删除。你无须担心如何自己清理它们。

那么这个ViewModel是啥呢,暂且当做是vue渲染出来的DOM吧。

那么这句话的意思就是把当前的DOM干掉,那么你所绑定在这个DOM上的所以事件都会被删掉从而达到了移除点击事件的功能。

我不清楚我对ViewModel的理解是否正确,希望有大佬指出错误。

推荐问题
宣传栏