2017-04-10 52 views
1

我有一个角度控制器和超时调用一个函数,设置一个ng显示依赖的变量。看来这个变量被成功地改变了,但是html元素仍然显示出来。角度ng显示没有反映变量的变化

的JS在我的控制器是:

setTimeout(function() { 
     console.log('showAlert is - ' + $scope.showAlert); 
     $scope.showAlert = false; 
     console.log('showAlert now is - ' + $scope.showAlert); 
     $scope.message = ''; 
}, 3000); 

这是在$ http.post调用成功功能发生(如果该事项

和HTML是:

<h3 ng-show="showAlert">{[{message}]}</h3> 

显示在控制台上的是:

showAlert is - true

showAlert now - false

所以它被改变成功,它似乎并没有模板正在仿效。它在加载页面时正确隐藏,并且$ scope.showAlert最初设置为false。

这似乎是一个非常简单的例子,我不知道为什么这不起作用。如果我把标签放入一个容器中,它的行为也是一样。

谢谢!

+0

你为什么要写{[{}]}?你改变了标记配置吗? – Sorikairo

+0

如果你不知道我在说什么,然后写{{message}}并测试 – Sorikairo

+0

我确实改变了它。 – jaibhavaya

回答

0

当您在3秒后通过调用settimeout函数对范围进行更改时,DOM可能已经加载并使用$ scope.showalert的初始值,如果稍后更改了值,则为了应用新的更改,你可以尝试在我们的函数结尾处放置$ scope。$ apply()。

+0

这是完全它,并工作。这有点奇怪,我不完全明白为什么它会因为setTimeout而延迟,如果我通过点击按钮改变了这个变量的话。你有什么可以解释的吗?非常感谢! – jaibhavaya

+0

改变按钮点击变量与此settimeout的区别在于,按钮点击会触发完整的摘要循环,这意味着它会更改范围值,根据值更改调整任何事件,然后应用于DOM中,其中我们的情况DOM已经加载并且在UI上应用更改,您需要调用$ apply函数。 – anveshtummala