繁体   English   中英

Angularjs $ scope。$以新语法应用

[英]Angularjs $scope.$apply in new syntax

我在angular中使用新语法:

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

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

代替:

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

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

您仍然可以将值注入“新语法”控制器中。 AngularJS Dependency Injections文档中的所有内容仍然适用。 例如:

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

如果您可以在应用程序中包含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

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

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

我想,如果要使用$ apply,$ digest ...(从$ rootScope继承),则必须以“传统方式”注入$ scope。 用法应该是这样的:

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

或者如果您想使用this语法

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

在这里, this仅适用于您在控制器本身中定义的属性和方法。 参见文档:

一个使用此方法将方法和属性直接绑定到控制器上

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM