Javascript 角度指令手表变量未触发
首先,这里是: 我有两个指令,一个是全局函数的双向绑定,另一个是全局函数正在改变的全局变量。然而,不知何故,当全局函数被调用时,我的watch函数不会被触发。非常感谢您的帮助Javascript 角度指令手表变量未触发,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,首先,这里是: 我有两个指令,一个是全局函数的双向绑定,另一个是全局函数正在改变的全局变量。然而,不知何故,当全局函数被调用时,我的watch函数不会被触发。非常感谢您的帮助 谢谢,因为您正在调用本机单击事件,摘要循环不会被调用。 使用$timeout解决此问题: app.directive('dir1', function($timeout){ return { scope:{ updateFunc:'=' }, link: function(scope
谢谢,因为您正在调用本机单击事件,
摘要
循环不会被调用。
使用$timeout
解决此问题:
app.directive('dir1', function($timeout){
return {
scope:{
updateFunc:'='
},
link: function(scope,element,attr,ctrl){
element.bind('click', function()
{
$timeout(scope.updateFunc)
});
}
}
});
如果您不想使用此超时选项执行此操作,则有几种其他方法可以解决此问题,我认为这些方法有一些优点: 1.)不要使用隔离范围。刚刚从控制器调用了该方法:
<button dir1 ng-click="updateFunc()">Click me!</button>
点击我!
2.)使用隔离作用域,使用ng单击“仍然”,但如下所示:
将函数作为属性传入。使用&的绑定模式并从scope对象获取它。你看,我称它为“update”,然后在指令中使用ng click=update()运行它。这还允许您将数据从指令传递到对象映射中的控制器,这在构建时非常有用或者,如果您想要一个隔离作用域指令,但不需要隔离该函数,您可以将所有单击逻辑放在DOM中,然后将其转移到指令中-使用来自#1的策略。转包的dom元素位于父级的控制器作用域-
3.)使用隔离作用域,您可以使用ng单击指令调用指令链接函数上的函数,以尝试将
$watch
的第一个参数替换为返回scope.updateFlag
的函数。或者将其更改为字符串。如果您有一些用于指令的全局模块,那么这样做仍然不起作用-不要忘记将您的指令类添加到模块的导出/声明部分,以便更好地使用范围。$apply()
比$timeout
@NewDev范围更有效。$apply()
如果已经在进行中,可能会给您带来错误$timeout
检查是否已在进行,然后调用$apply()
。请参阅-在这种情况下,如果我理解正确,该摘要永远不应该“进行中”。
<button dir1 ng-click="updateFunc()">Click me!</button>