Angular @服务输出
我正在使用Angular CLI。事实上,我有一个服务。此服务返回变量应答。我想在应用程序组件中使用变量(或变量的副本)。因此,当答案发生变化时,必须在应用程序组件中看到。现在我只能看到变量的初始值,看不到改变的答案 服务:Angular @服务输出,angular,typescript,rxjs,angular-services,Angular,Typescript,Rxjs,Angular Services,我正在使用Angular CLI。事实上,我有一个服务。此服务返回变量应答。我想在应用程序组件中使用变量(或变量的副本)。因此,当答案发生变化时,必须在应用程序组件中看到。现在我只能看到变量的初始值,看不到改变的答案 服务: import { Injectable } from '@angular/core'; import { CanActivate } from '@angular/router'; @Injectable() export class LogInGuardServi
import { Injectable } from '@angular/core';
import { CanActivate } from '@angular/router';
@Injectable()
export class LogInGuardService implements CanActivate {
public answer: boolean;
public i: number = 0;
canActivate() {
let entered = JSON.parse(localStorage.getItem('enteredValue'));
let enteredEmail = entered.email_field;
let enteredPw = entered.password_field;
let guardChange = false;
for (var i = 1; i < localStorage.length; i++) {
let stored = JSON.parse(localStorage.getItem(localStorage.key(i)));
let storedEmail = stored.email_field;
let storedPw = stored.password_field;
if ( enteredEmail == storedEmail ) {
if ( enteredPw == storedPw ) {
this.answer = true;
} else {
alert('Неверный пароль');
this.answer = false;
}
} else {
this.i++;
}
}
if (this.i == localStorage.length-1) {
alert('Пользователя с таким e-mail не существует');
}
return this.answer;
}
constructor() { }
}
如果你想在你的服务中存储一些变量,你可以使用可观测数据 用这个。主体既是可观察的,又是观察者。因此,您可以告诉它有一个新的答案,它将通知所有订户 为您服务:
answer$ = new BehaviorSubject<string>('');
getAnswer(): Observable<string> {
return this.answer$.asObservable();
}
giveAnswer(answer: string) {
this.answer$.next(answer);
}
您可以在任何地方订阅价值更改:
AnswerService.getAnswer().subscribe(answer => console.log(answer));
当调用构造函数时,您将获得一次值,您需要做的是发布该值的更改,从您的服务(主题、行为主题)使用RxJS,等等。。。这样,您的“guardInMain”值将被更新代码>因为暴露主题是自找麻烦。这也使得类型注释变得多余incidentally@AluanHaddad你绝对是对的。非常感谢。我学到了一些新东西:-)
AnswerService.giveAnswer('this is my answer');
AnswerService.getAnswer().subscribe(answer => console.log(answer));