Angularjs 角度-$scope.$apply导致控制器停止加载
每当我运行应用程序时,角度{{}保持不变。如果我删除$scope.$apply,大括号将消失,并显示正确的值 我使用的是Angular+字体脚本 控制器:Angularjs 角度-$scope.$apply导致控制器停止加载,angularjs,typescript,Angularjs,Typescript,每当我运行应用程序时,角度{{}保持不变。如果我删除$scope.$apply,大括号将消失,并显示正确的值 我使用的是Angular+字体脚本 控制器: module Application.Controllers { export class TestController { public hello: string = "hello"; private scope: any; constructor($scope: ng.IScope) {
module Application.Controllers {
export class TestController {
public hello: string = "hello";
private scope: any;
constructor($scope: ng.IScope) {
this.scope = $scope;
this.scope.hello = "Hi";
this.scope.$apply();
alert('no errors');
}
}
}
控制器定义(在应用程序加载几秒钟后的初始化函数中):
观点:
<div ng-controller="TestCTRL as t">
<div>{{ t.hello }} {{ 1 - 1 }}</div>
</div>
{{t.hello}{{1-1}}
我看到的不是“Hello 0”,而是{{t.Hello}{{{1-1}}
如果我删除this.scope.$apply调用,它会工作,但它会显示hello而不是hi
我使用的是IE 11,Angular 1.4.9
我的DOM中还有另外两个正在工作的控制器,每当它到达这个控制器时,它就会停止,除非我删除$scope。$apply您有两个
hello
字段:一个是控制器的字段,其值为“hello”,在视图中使用{t.hello}
,另一个是作用域的字段,其值为“hi”,使用{{hello}
在视图中可用,或者,由于将作用域存储在控制器的字段中,因此使用{{t.scope.hello}
如果需要单个字段,则使用
this.hello = "Hi";
而不是
this.scope.hello = "Hi";
在使用Controllera时,通常不会将任何内容存储到范围中。大多数情况下,您甚至不需要示波器。控制台中有错误吗?根据我的经验,当angular无法绑定它的时,会抛出一个异常并掉下。0x800a139e-JavaScript运行时错误:[$rootScope:inprog]$apply已在进行中。好了。不需要
$apply
,因为它已经在运行。你为什么还需要它?事情是否不像你期望的那样有约束力?如果是这样,@JBNizet答案可能就是解决方案。一般来说,$apply
的使用很少,通常只有在angulars域之外发生事情时,比如jQuery事件。我的其他一个控制器的数据绑定不正确,所以我制作了一个测试控制器并在其中放置了一些值。我认为它加载不正确,因为我使用的是this.scope而不是直接变量。是的,@JBNizet-answer听起来像是一个解决方案。还需要注意的是,$apply
的意思是告诉用户作用域在不知道的情况下发生了更改,并更新了绑定。您还调用了$apply
,但没有向其传递函数。这不是使用它的最佳方式,如果抛出错误,您将无法捕获它并执行错误处理。我知道你不是在这个特定的案件中,但仅供参考。
this.scope.hello = "Hi";