AngularJS $范围不填充视图

时间:2013-01-22 17:01:25

标签: angularjs

我有这样的观点:

<div ng-controller= "test" ng-init = "doit()">
    <span>{{testval}}</span>
</div>

视图的控制器如下所示:

function test($scope){
    var counter = 0;
    $scope.doit = function(){
       console.log('switched to view');
       $scope.testval = counter++; 
    };
};

我第一次切换到'test'控制的视图时,显示'0'。之后,它什么都没显示,但console.log继续触发。每次切换到视图并通过修改$ scope成功更新视图时,如何将其设置为执行'doit'?

由于

2 个答案:

答案 0 :(得分:5)

删除ng-init()并将对doit()的调用放入控制器:

function test($scope){
    var counter = 0;
    $scope.doit = function(){
       console.log('switched to view');
       $scope.testval = counter++; 
    };
    $scope.doit();
};

每次切换到此视图时,控制器代码都将执行。 如果您希望计数器在视图更改之间保持不变,则必须将其放入服务或$ rootScope中(因为当您移动到另一个视图时,控制器及其$ scope会被销毁)。

答案 1 :(得分:0)

必须将$scope.digest()添加到doit的末尾。列出的示例是我在较小规模上遇到的逻辑的简化示例。实际上,它是一个名为getPhysOrd的函数,它执行一个异步模板化的websocket桥来查询服务器上的数据。它必须能够即时完成。调用摘要迫使观察者根据模型更改更新视图。谢谢