Angular Promise没有摘要

时间:2017-06-04 18:16:06

标签: angular promise angular-promise angular-digest

我是新来的承诺概念,我正在尝试提交登录表单时遇到问题。

当promise被解决时,我想通过更改范围变量的值来更新ui。

这是控制器方法,称为

 $ctrl.loginForm = function(isValid) {
    // check to make sure the form is completely valid

    if (isValid) {
      LoginService.login($ctrl.user).then(function (value) {
          $ctrl.loginError = false;
          var cookie = value.token;
      }, function (reason) {
          $ctrl.loginError = true;

      });
    }

  };

这是我的服务方法

  service.login = function(credentials) {
    return new Promise((resolve, reject) => {
      $http.post(AppConst.Settings.apiUrl + 'api-token-auth/',credentials).success((data) => {
        resolve(data);
      }).error((err, status) => {
        reject(err, status);
      });
    });
  };

因此,一旦解析了promise,控制器中的$ ctrl.loginError就会改变它的值,但它不会在UI上更新。

我尝试使用$ apply它有效,但我不明白为什么我必须使用$ apply!我认为摘要周期默认开始!

我做错了什么?

1 个答案:

答案 0 :(得分:0)

$http方法返回一个$ q服务的承诺。所以,问题是你使用原生的promise包装器,它不会告诉angular的范围运行$ apply方法。 将您的服务更改为以下

service.login = function(credentials) {
  return $http.post(AppConst.Settings.apiUrl + 'api-token-auth/',credentials);
};