如何处理angularJS ng-if中的异步变量?

时间:2018-08-08 23:04:33

标签: angularjs asynchronous angular-directive

我在ng-if="ctrl.zoo"中有一个条件(在某个指令中,ctrl.zoo = ctrl.foo && ctrl.bar)。问题是bar通过异步函数调用进行初始化,并且由于某种原因,angularJS不会更新我的UI,即使我将bar包括在我的范围内。我用谷歌搜索,观察其他变量为另一个变量分配一个新值(基本上是观察bar的变化)是一个坏主意。如果我内联ctrl.zoo(例如ng-if="ctrl.foo && ctrl.bar“`),它确实可以正常工作。是否有任何简单的解决方法?

1 个答案:

答案 0 :(得分:4)

如果在控制器中分配了zoo = foo && bar,则无论zoo的值是否更改,值bar都将保持不变。

如果您想更新zoo,则有两种选择:

  1. 异步函数调用完成后,将zoo的值再次更新为foo && bar

  2. 在您的指令控制器中编写一个名为getZoo()的函数,该函数返回foo && bar。在指令的模板中使用该函数,并在指令的作用域上更新bar的值时,该作用域将运行摘要循环,并且该函数将返回新值。在模板中内联ctrl.foo && ctrl.bar的原因是因为您实际上是在这样做。