我想在页面初始化后更改范围变量。 我有一个带有以下代码的角度应用程序:
$scope.names = ['Jack'];
append_name = function(){$scope.names.push('Bob');}
setTimeout(append_name, 2000);
我没有看到指定延迟后的值发生变化。 这是plunker http://plnkr.co/edit/FBa2fwb7js8pRNENNJof
答案 0 :(得分:1)
简答:使用内置$timeout
服务代替setTimeout
:
http://plnkr.co/edit/nh1jEhocRpXtD0rUTh4k?p=preview
答案 1 :(得分:0)
如果您创建角度以外的代码,则需要告诉您使用$ apply
更改某些内容$scope.names = ['Jack'];
append_name = function() {
$scope.$apply(function() {
$scope.names.push('Bob');
});
};
setTimeout(append_name, 2000);
您可以使用$apply
创建方便的高阶函数来包装函数:
function ngWrap($scope, fn) {
return function() {
var args = [].slice.call(arguments);
if ($scope.$$phase) {
fn.apply(null, args);
} else {
return $scope.$apply(function() {
fn.apply(null, args);
});
}
};
}
这可以像:
一样使用setTimeout(ngWrap($scope, function() {
$scope.names.push('Bob');
}), 2000);
还有角度有$ timeout来处理这个问题。