Angularjs $ scope。$以新语法应用

时间:2015-06-12 14:41:49

标签: javascript angularjs html5

我在angular中使用了新语法:

app.controller('NewLocationController', function() {
  var newLocation = this;
...
}

<div ng-controller="NewLocationController as newLocation">
</div>

而不是:

app.controller('NewLocationController', function($scope) {
  ....
}

我想在新语法中使用$scope.$apply()。我怎么能用它?

4 个答案:

答案 0 :(得分:0)

您仍然可以将值注入&#34;新语法&#34;控制器。 AngularJS Dependency Injections documentation中的所有内容仍然适用。例如:

app.controller('NewLocationController', function($scope) {
  var newLocation = this;
  ...
}

答案 1 :(得分:0)

如果您可以在应用中添加jQuery,那么您可以尝试使用从DOM元素获取范围的内容。我们需要jQuery的原因是因为没有jQuery的angular.element没有使用属性选择器找到元素。

app.controller('NewLocationController', function() {
  var newLocation = this;
  $scope = angular.element('[ng-controller^="NewLocationController"]').scope();

  $scope.name = 'from controller without scope';

  if (!$scope.$$phase) {
    $scope.$apply(function () { 
      newLocation.name = "Hello" 
    });
  }
});

确保在页面上包含AngularJS之前包含jQuery。

演示 http://plnkr.co/edit/f3tHKicg9EOOLWDCS6IQ?p=preview

答案 2 :(得分:0)

我通常建议您避免在控制器中使用$scope.apply(),而是尝试重构代码并将该逻辑放在指令中。说过我理解有时候这是必要的,如果你需要在“控制器为”样式中使用$ scope,你仍然可以将它注入控制器而没有任何问题。

app.controller('NewLocationController', function($scope) {      
}

答案 3 :(得分:-1)

如果您想使用$ apply,$ digest,...(继承自$ rootScope),我认为你必须注入$ scope传统方式&#39;  用法应该是这样的:

app.controller('NewLocationController', function($scope)   
{
  $scope.$apply(...);
}

或者如果你想使用这个语法

app.controller('NewLocationController', function($scope)   
{
 this.$apply=$scope.$apply;
 this.$apply(...);
}

此处,this仅适用于您在控制器本身中定义的属性和方法。请参阅文档:

  

使用此

将方法和属性直接绑定到控制器上