在AngularJS中,当模型更改未通过正常的AngularJS方式进行更新时,他们使用$scope.$apply()
方法来更新UI。
在最近的教程中,他们建议使用<controller> as <object>
样式实例化对象,并使用this
作为示例中的范围
.controller('TodoListController', function() {
var todoList = this;
但todoList.$apply()
似乎不起作用。我被迫使用$scope.$apply()
吗?
答案 0 :(得分:7)
是的,你必须使用$ scope。$ apply(),但这并不是件坏事。
在阅读之后我应该使用controllerAs语法时遇到了同样的困境。几个月后我甚至问过这个问题In an isolate scope directive is there any difference between defining variables on scope and defining variables on the controller?
在考虑了一段时间之后,答案是控制器的语法并不意味着对$scope
的厌恶,而是一种设计模式,以防止全局状态存储在$scope
中因为那时你开始嵌套范围,这会导致很多问题。
$scope
不是一件坏事。它只是让你自己搞砸了,但如果你需要使用它,你不应该阻止自己这样做。
答案 1 :(得分:2)
认为你的意思是&#34;控制器为&#34;语法,更新问题标题会很好。您仍然可以注入$ scope并将其用于注册手表或其他任何东西,通常您不会在控制器中调用$ apply,通常是在指令中完成以响应某些更改模型和需要触发Angular来刷新。
答案 2 :(得分:2)
对此的解决方案是使用ES5 bind或angular.bind函数将其作为绑定参数传递
Eexmaple:
f
&#13;
答案 3 :(得分:0)
直接在控制器this
中引用控制器
.controller('TodoListController', function() {
var todoList = this;
这里todoList是控制器。
但是在范围内定义的方法中,this
指的是范围。所以
.controller('TodoListController', function($scope) {
$scope.myFunction = function() {
var todoList = this;
....
会有todoList指向范围,你可以做todoList。$ apply()