对服务中的属性的更改不会触发更改

时间:2017-04-18 22:29:31

标签: angular-services angularjs

我有以下UserService,其中我只是在实例中拥有一个属性来确定用户isAuthenticated。出于某种原因,即使通过将this.isAuthenticated设置为各种值,logout以及其他一些方法来更改值,Angular也不会捕获该更改。我甚至尝试过手册$digest$apply,但仍然没有运气。

export default class UserService {

  constructor($http, $state, AppConstants, JWTService) {
    'ngInject';

    this.$http = $http;
    this.$state = $state;

    this.isAuthenticated = false;
  }


  logout() {
    this.isAuthenticated = false;
    this.$state.go('login', null, { reload: true });
  }

  verify() {
    return new Promise((resolve) => {

      // if a user exists, then resolve
      if (this.isAuthenticated) {
        return resolve(true);
      }

      this.$http({
        method: 'POST',
        url: `${this.AppConstants.api}/verify`
      })
      .then(() => {
        this.isAuthenticated = true;
        return resolve(true);
      })
      .catch(() => {
        this.isAuthenticated = false;
        return resolve(false);
      });
    });
  }

}

代码有效,当我第一次登录时,我将this.isAuthenticated设置为true,this.verify通过发布工作。但是,当我logout时,即使this.isAuthenticatd属于false,当再次调用if (this.isAuthenticated)时,条件true仍为this.verify

1 个答案:

答案 0 :(得分:0)

“this”不是您认为的.then()函数内部的内容。范围已经改变。这种情况很常见,只是在使用javascript时必须经常记住的事情。以下是您可以采取的一个示例:

javascript promises and "this"