[英]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。
我通常建议您避免在控制器中使用$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.