Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular @服务输出_Angular_Typescript_Rxjs_Angular Services - Fatal编程技术网

Angular @服务输出

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

我正在使用Angular CLI。事实上,我有一个服务。此服务返回变量应答。我想在应用程序组件中使用变量(或变量的副本)。因此,当答案发生变化时,必须在应用程序组件中看到。现在我只能看到变量的初始值,看不到改变的答案

服务:

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));