如何使用新的`controller as`语法来$ scope。$ apply()?

时间:2015-08-18 04:02:23

标签: javascript angularjs

在AngularJS中,当模型更改未通过正常的AngularJS方式进行更新时,他们使用$scope.$apply()方法来更新UI。

在最近的教程中,他们建议使用<controller> as <object>样式实例化对象,并使用this作为示例中的范围

.controller('TodoListController', function() {
var todoList = this;

todoList.$apply()似乎不起作用。我被迫使用$scope.$apply()吗?

4 个答案:

答案 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:

&#13;
&#13;
f
&#13;
&#13;
&#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()