Javascript 如何使用新的`controller as`语法执行$scope.$apply()?

Javascript 如何使用新的`controller as`语法执行$scope.$apply()?,javascript,angularjs,Javascript,Angularjs,在AngularJS中,他们有$scope.$apply()方法在模型更改不是通过正常AngularJS方式完成时更新UI 在最近的教程中,他们建议使用作为实例化对象的样式,并使用此作为示例的范围 .controller('TodoListController', function() { var todoList = this; 但是,todoList.$apply()似乎不起作用。我是不是被迫使用$scope.$apply()来解决这个问题?你是说“controller as”语法,最好更

在AngularJS中,他们有
$scope.$apply()
方法在模型更改不是通过正常AngularJS方式完成时更新UI

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

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

但是,
todoList.$apply()
似乎不起作用。我是不是被迫使用
$scope.$apply()
来解决这个问题?

你是说“controller as”语法,最好更新问题标题。您仍然可以注入$scope并将其用于注册手表或其他任何东西,但通常您不会在控制器内调用$apply,通常它是在指令中完成的,以响应更改模型并需要触发Angular刷新的事件。

直接在控制器中
指控制器

.controller('TodoListController', function() {
    var todoList = this;
这里todoList是控制器


但是在范围定义的方法中,
指的是范围。所以

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

将todoList指向作用域,您可以执行todoList。$apply()

是的,您必须使用$scope。$apply(),但这不是一件坏事

在阅读了controllerAs语法之后,我遇到了同样的困境。几个月后我甚至问了这个问题

经过一段时间的思考,答案是controllerAs语法并不意味着厌恶
$scope
,而是一种防止全局状态存储在
$scope
中的设计模式,因为此时开始嵌套作用域,这会导致很多问题


$scope
不是坏事。它只会让你自寻烦恼,但如果你需要使用它,你不应该阻止自己这么做。

解决方法是使用ES5 bind或angular.bind函数将其作为绑定参数传递

Eexmaple:

myApp.controller(“myController”,['$scope',函数){
this.name=“val1”;
console.log(“1:+this.name”);
setTimeout(函数(){
console.log(“2:+this.name”);
s、 $apply(函数(){
this.name=“val2”;
}.约束(这个);
console.log(“3:+this.name”);
}.约束(这个);

}]);我更新了标题。因此,如果我想使用
$apply
,听起来好像我被迫注入
$scope
,那么?