Javascript 如何使用新的`controller as`语法执行$scope.$apply()?
在AngularJS中,他们有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”语法,最好更
$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
,那么?