Javascript 使用$apply而不使用$scope的AngularJS
我开始使用AngularJS,我接受了用它编写控制器的约定,而不是用$scope。因此,我的控制器如下所示:Javascript 使用$apply而不使用$scope的AngularJS,javascript,angularjs,Javascript,Angularjs,我开始使用AngularJS,我接受了用它编写控制器的约定,而不是用$scope。因此,我的控制器如下所示: myApp.controller("SomeController", function(){ this.myModel={id:-1, name:"empty"}; }); <div ng-controller="SomeController as ctrl"> <input type="text" ng-model="ctrl.myModel.nam
myApp.controller("SomeController", function(){
this.myModel={id:-1, name:"empty"};
});
<div ng-controller="SomeController as ctrl">
<input type="text" ng-model="ctrl.myModel.name" />
</div>
this.myModel=someOtherObjectFromAForeignSource;
。。。输入控件中的值不会改变。我读过$apply函数及其用法,但因为我使用了“this”约定,所以没有$scope变量
如何调用$apply方法?您当然仍然可以将$scope与
控制器一起作为语法使用,而不会出现任何问题
事实上,这就是处理事件的方式($on
,$broadcast
,$emit
)只需将其插入控制器:
app.controller('MyCtrl', function($scope){
//set your properties/methods as you are
this.message = 'foo';
this.yell = function(){
this.message = this.message.toUpperCase() + '!!!';
};
var vm = this;
//and use $apply as needed
somethingOutsideOfAngular(function(value){
$scope.$apply(function(){
vm.message = value;
});
});
});
为什么您认为您需要$apply()
?其他数据来自哪里您的输入
也设置为名称
属性-您的新对象是否包含该属性?是的,它包含名称属性-此新对象来自第三方控件,angular无法自动注册更改。无论如何,我的问题仍然是如何在不使用$scope的情况下使用$apply方法?我认为,在没有$scope或$rootScope的情况下不能使用$apply代码>。因为如果您的控制器中没有使用第三方库(如jQuery),则应该更新模型。考虑使用…..所以我仍然需要注入$范围,如果我想使用$Apple?我试过这样做,它确实有效,但我认为还有另一种方法。梅托,这是正确的,因为$apply
是$scope
对象上的一个方法。这不是我想要的答案,但还行-您可能知道我在哪里可以确认您真的需要为$apply注入$scope吗?$apply
的文档说明了它是scope对象上的一个方法,这是基于您的需要调用$apply
的唯一方法是通过注入$Scope
来获得实际的$Scope
对象,这当然是使用controllerAs
语法的一个限制,因为您无论如何都必须注入并调用$Scope
,如答案所示