Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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 角度指令手表变量未触发_Javascript_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

Javascript 角度指令手表变量未触发

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

首先,这里是:

我有两个指令,一个是全局函数的双向绑定,另一个是全局函数正在改变的全局变量。然而,不知何故,当全局函数被调用时,我的watch函数不会被触发。非常感谢您的帮助


谢谢,

因为您正在调用本机单击事件,
摘要
循环不会被调用。 使用
$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>