Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-更改指令中的ngClick函数_Javascript_Angularjs_Directive - Fatal编程技术网

Javascript AngularJS-更改指令中的ngClick函数

Javascript AngularJS-更改指令中的ngClick函数,javascript,angularjs,directive,Javascript,Angularjs,Directive,我有一个场景,在某些情况下,我需要根据用户权限动态更改ngClick函数。我想在指令中这样做,而不是在控制器中这样做,这样它就可以在不造成严重后果的情况下被移除。现在,我可以使用以下命令更改指令中的ngClick值: attr.$set('ngClick', 'vm.testing()'); $timeout(function() { scope.$apply(); }); 这段代码将dom元素中的ngClick更改为“vm.testing()。但是,事件侦听器仍

我有一个场景,在某些情况下,我需要根据用户权限动态更改ngClick函数。我想在指令中这样做,而不是在控制器中这样做,这样它就可以在不造成严重后果的情况下被移除。现在,我可以使用以下命令更改指令中的ngClick值:

attr.$set('ngClick', 'vm.testing()');
$timeout(function() {           
    scope.$apply();
});

这段代码将dom元素中的ngClick更改为“vm.testing()。但是,事件侦听器仍在启动旧函数,而不是新添加的函数。如何将侦听器更新为新函数?

这听起来像是应该由ng click中引用的方法处理的事情,否?或者您可以始终将vm.testing设置为指向其他对象。您具体想将方法更改为什么?一个完全不同的逻辑,还是一个普通的“您缺乏权限”消息?为什么要在飞行中改变它?用户权限是否会在运行中更改?请解释“我希望在指令中执行此操作,而不是在控制器中执行此操作”的原因。。。这种情况在控制器中处理。控制器是(在服务的帮助下)您对应用程序/视图的行为进行“推理”的地方。指令的作用是将行为扩展或分配给它们所应用的视图的一小部分。我希望将其保留在指令中的原因是,我们可以将其删除或添加到任何DOM中,而无需拆开控制器并找出如何添加限制,从而可能破坏某些东西。我决定用以下代码hi-jack事件click并停止它:elem.on('click',function(event){event.stopImmediatePropagation();})@我不同意你的看法。这是业务逻辑,应该放在控制器中。指令应该尽可能地愚蠢。另外,您是否在指令中定义了隔离范围?