【问题标题】:BehaviorSubject undefined issueBehaviorSubject 未定义问题
【发布时间】:2017-06-09 12:28:22
【问题描述】:

我正在尝试在我的服务中创建一个变量,每当我注入此服务时都可以访问该变量。但是,我无法填充 BehaviorSubject 类型的 login$。我检查了thisthis,但我很难理解它是如何工作的。

组件

this.loginService.login = user.value.username; // OK
this.loginService.pass = user.value.password; // OK
this.loginService.emitLogin(user.value.username); // UNDEFINED - user.value.username is input field of form group

登录服务

export class LoginService {

  public login: string;
  public pass: string;
  public login$ = new BehaviorSubject(this.login);

  emitLogin(value: string) {
    this.login$.next(value);
  }

  constructor(private http: Http) { } 
}

另外,我想在我的DriverService 中使用login$。这是我到目前为止所做的:

DriverService

    export class DriverService {    
      private login;

      constructor(private http: Http, private loginService: LoginService) {
        this.loginService.login$.subscribe(value => {
          console.log(value);
          this.login = value;
        });
      }
}

我怎样才能正确填充,并使其在其他服务中可用?

谢谢

【问题讨论】:

  • this.login 最初是 undefined... :) 尝试使用 public login: string = ''

标签: angular typescript behaviorsubject


【解决方案1】:

BehviorSubject 总是使用一些值进行初始化,但在您的代码中使用变量定义进行初始化。

 public login: string;
 public login$ = new BehaviorSubject(this.login);

做这样的事情

public login$ = new BehaviorSubject('');
emitLogin(value: string) {
    this.login$.next(value);
  }

【讨论】:

  • 我应用了您的更改。现在它在控制台中是这样的:BehaviorSubject... _value:"Testing"...DriverService 有空字符串。还有什么想法吗?
  • 根据我的理解,Login 和 DriverService 正在同时初始化,因此 BehaviorSubject 的初始值为“”(空字符串)。在 drivieService 中,第一个值将是 ' ',因为 BehaviorSubject 第一个值是空的。使用您的 this.loginService.emitLogin(user.value.username) 完成应用程序初始化后;将被调用并正确将被推送。你为什么在这里使用 BehaviorSubject 我认为在你的情况下简单的主题就足够了(stackoverflow.com/questions/21257830/…
  • 我认为这些服务没有同时初始化,因为当我初始化应用程序时,您要做的第一件事就是通过登录过程,然后您可以访问DriverService。我使用 BehaviorSubject 是因为我无法让标准的 Subject 工作(好吧,BehaviorSubject 也不能​​工作,哈哈)。
  • 根据应用模块定义进行初始化。在这两个服务中尝试控制台登录构造函数。创建 plunker 可能我可以提供帮助
  • 对不起,我迟到了:这里是 plunker:plnkr.co/edit/X38rbSArps32AduSa4la?p=preview
猜你喜欢
  • 2018-02-20
  • 1970-01-01
  • 2022-08-01
  • 2015-05-06
  • 2021-02-24
  • 2018-06-16
  • 1970-01-01
  • 2017-09-22
  • 2019-02-24
相关资源
最近更新 更多