在问这个问题之前,我在网上查了一下,但我找不到合适的答案。
所以,我想从指令向控制器发出一个事件,当这个事件发生时,我想更新DOM。我做了一个假人plunker,请检查一下。
当我发出事件时,控制器注意到但他没有更新DOM。请在发射事件时查看控制台。
任何人都可以向我解释一下吗? 谢谢
答案 0 :(得分:2)
你需要在$ scope.show = true周围包装$ scope。$ apply,如:
$scope.$apply(function() {
$scope.show = true;
});
基本上当你发出事件并且你的控制器捕获它并将$ scope.show设置为true时,逻辑发生在Angular的摘要周期之外。由于摘要周期没有看到更新,因此它不会更新DOM。
$ scope。$ apply明确告诉Angular:"嘿,我已经更新了这个变量,检查出来并为我更新了DOM"
更多信息和非常好的解释:http://jimhoskins.com/2012/12/17/angularjs-and-apply.html