我有一个复选框,例如:
<input type="checkbox" ng-model="isPreCheckIn" />
我从使用isPreCheckin
的服务获得$q
(布尔值),并从服务器或localStorage
返回(如果存在)。
控制器中的调用如下所示:
deviceSettings.canCheckIn().then(function (canCheckIn) {
$scope.isPreCheckin = !canCheckIn ? true : false;
});
deviceSettings.canCheckIn
看起来像:
function canCheckIn() {
var dfrd = $q.defer();
LoadSettings().then(function (success) {
return dfrd.resolve(localStorage.canCheckIn);
});
return dfrd.promise;
};
因此,在首页加载时,复选框无法正确绑定到isPreCheckIn
;事实上,如果我做{{isPreCheckIn}}
,它也不会。如果我关掉那个页面并返回,它就可以了。
答案 0 :(得分:1)
似乎canCheckIn超出了角度,根据这个假设,你需要在$ scope.apply中包装你的作业:
deviceSettings.canCheckIn().then(function (canCheckIn) {
$scope.$apply(function(){
$scope.isPreCheckin = !canCheckIn ? true : false;
});
});
这告诉angular识别$ scope的更改并应用于您的UI。
答案 1 :(得分:0)
我认为你应该在$ apply中包含以下内容:
function canCheckIn() {
var dfrd = $q.defer();
LoadSettings().then(function (success) {
scope.$apply(function() {
dfrd.resolve(localStorage.canCheckIn);
}
});
return dfrd.promise;
};
答案 2 :(得分:0)
这听起来像是一个时间问题。您可能需要在路由中放置一个resolve子句以使此调用时间运行,然后将结果作为DI值传递。如果不知道您使用的路由器,则无法给出准确的答案,但您可以查看有关routes and resolve的egghead.io视频。