错误绑定复选框到$ scope

时间:2014-04-07 20:35:50

标签: angularjs

我有一个复选框,例如:

<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}},它也不会。如果我关掉那个页面并返回,它就可以了。

3 个答案:

答案 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视频。