0

我有这样的看法:

<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++; 
    };
};

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

谢谢

4

2 回答 2

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,在您移动到另一个视图时会被销毁)。

于 2013-01-22T17:21:53.033 回答
0

不得不添加$scope.digest()到末尾doit。列出的示例是我在更小范围内遇到的逻辑的简化示例。实际上,它是一个调用的函数,它getPhysOrd执行一个异步模板化的 websocket 桥以从服务器查询数据。它必须能够即时执行此操作。调用摘要强制观察者根据模型更改更新视图。谢谢

于 2013-01-22T17:28:30.103 回答