Javascript 使用$apply而不使用$scope的AngularJS

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

我开始使用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.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
,如答案所示