我遇到了一个问题,即范围更改没有反映在视图中。
"use strict"
app.controller "DashboardController", ($scope, $http, $filter, $location) ->
$scope.greeting = 'Hello from the dashboard!'
$scope.time = ""
$scope.updateClock = ->
date = new Date()
$scope.time = [date.getHours(), date.getMinutes(), date.getSeconds()].join(':')
setInterval $scope.updateClock, 1000
这是coffeescript代码。
<div class="clock">
{{time}}
</div>
这就是我的观点。
时间不显示。如果我手动在控制器的开头设置$scope.time
它可以正常工作,但只是当它在一个函数内时。编译好的咖啡因看起来像这样:
(function() {
"use strict";
app.controller("DashboardController", function($scope, $http, $filter, $location) {
$scope.greeting = 'Hello from the dashboard!';
$scope.time = "";
$scope.updateClock = function() {
var date;
date = new Date();
return $scope.time = [date.getHours(), date.getMinutes(), date.getSeconds()].join(':');
};
return setInterval($scope.updateClock, 1000);
});
}).call(this);
为什么会这样做?
答案 0 :(得分:0)
setInternal在AngularJS的摘要/工作循环之外工作,因此Angular不知道执行脏检查。使用$ apply明确告诉Angular这样做。
$scope.$apply(setInterval($scope.updateClock, 1000));
修改
Angular现在有一个window.setInterval的包装器,你应该使用它。将$ interval注入控制器。然后将该行更改为:
$interval($scope.updateClock, 1000);
好多了。