Angularjs承诺不会运行摘要



我是新的承诺概念的新手,我在尝试提交登录表单时面临问题。

解决承诺时,我想通过更改示波器变量的值来更新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);
      });
    });
  };

因此,一旦在控制器中解决了承诺后的$ctrl.loginError,则更改其值,但不会更新UI。

我已经尝试使用$apply,并且可以使用,但是我不明白为什么必须使用$apply!我以为摘要周期默认开始!

我做错了什么?

$http方法返回您的诺言,即$ q服务。因此,问题是您使用本机承诺包装器,该包装器不告诉Angular的范围运行$应用方法。将您的服务更改为以下

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

最新更新