我有这样的观点:
<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'?
由于
答案 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桥来查询服务器上的数据。它必须能够即时完成。调用摘要迫使观察者根据模型更改更新视图。谢谢