我有以下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
答案 0 :(得分:0)
“this”不是您认为的.then()函数内部的内容。范围已经改变。这种情况很常见,只是在使用javascript时必须经常记住的事情。以下是您可以采取的一个示例: