我在angular中使用了新语法:
app.controller('NewLocationController', function() {
var newLocation = this;
...
}
和
<div ng-controller="NewLocationController as newLocation">
</div>
而不是:
app.controller('NewLocationController', function($scope) {
....
}
我想在新语法中使用$scope.$apply()
。我怎么能用它?
答案 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。
答案 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
仅适用于您在控制器本身中定义的属性和方法。请参阅文档:
使用此
将方法和属性直接绑定到控制器上