Angular指令 - 监视指令的父控制器(require)不会触发$ watch回调

时间:2017-02-22 09:45:37

标签: javascript angularjs angularjs-directive

我正在尝试构建一个自定义角度表指令,并遇到了一个奇怪的问题。我有一个父指令parentDir,里面有多个子元素childDir。单击childDir时,它会调用父项的sortByKey函数,该函数会更改控制器的sorting变量,稍后将根据单击的列对数据进行排序。< / p>

问题是,在childDirs中,我正在观察父项的sorting变量,但是当变量值发生变化时,回调函数不会触发。相反,它似乎将回调排队,直到在父指令控制器的$ scope或其父$ scope中发生某些事情 - 例如,更改带有ng-model的输入会触发所有排队的$ watch回调。

到目前为止,我试图在$scope.$apply()函数(不起作用)和watch回调中调用sortByKey(由于它没有被调用,显然不起作用)。我有点难以回避为什么回调没有触发,因为这是我第一次遇到这种行为。

Here's a link to the plunker demonstrating the behaviour。打开控制台,然后单击“Hello”,“Hello 2”和“Hello 3”文本。您可以在控制台中看到正确调用了sortByKey函数,但没有$watch回调的日志记录。然后更改输入的值,您可以看到回调函数console.logs

总结:

    在更新父作用域之前,
  • $watch()回调函数未在子指令中触发
  • 添加$scope.$apply来电无效
  • 想要的结果是show文字在单击文本后显示在单击的文本之后,并从所有其他文本中消失

0 个答案:

没有答案