Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度-$scope.$apply导致控制器停止加载_Angularjs_Typescript - Fatal编程技术网

Angularjs 角度-$scope.$apply导致控制器停止加载

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) {

每当我运行应用程序时,角度{{}保持不变。如果我删除$scope.$apply,大括号将消失,并显示正确的值

我使用的是Angular+字体脚本

控制器:

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";