Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.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_Behaviorsubject - Fatal编程技术网

Angular 行为主体未定义问题

Angular 行为主体未定义问题,angular,typescript,behaviorsubject,Angular,Typescript,Behaviorsubject,我试图在我的服务中创建一个变量,每当我注入这个服务时,它都是可访问的。但是,我无法填充BehaviorSubject类型的登录$。我检查了一下,但是我很难理解它是如何工作的 组件 this.loginService.login = user.value.username; // OK this.loginService.pass = user.value.password; // OK this.loginService.emitLogin(user.value.username); // UN

我试图在我的服务中创建一个变量,每当我注入这个服务时,它都是可访问的。但是,我无法填充BehaviorSubject类型的
登录$
。我检查了一下,但是我很难理解它是如何工作的

组件

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) { } 
}
    export class DriverService {    
      private login;

      constructor(private http: Http, private loginService: LoginService) {
        this.loginService.login$.subscribe(value => {
          console.log(value);
          this.login = value;
        });
      }
}
另外,我想在我的
DriverService
中使用
login$
。以下是我到目前为止所做的:

驾驶员服务

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) { } 
}
    export class DriverService {    
      private login;

      constructor(private http: Http, private loginService: LoginService) {
        this.loginService.login$.subscribe(value => {
          console.log(value);
          this.login = value;
        });
      }
}
我如何才能正确地进行填充并使其在其他服务中可用


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

 public login: string;
 public login$ = new BehaviorSubject(this.login);
做这样的事

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

this.login
未定义的
最初…)在服务中尝试
公共登录:string='
。我应用了您的更改。现在在控制台中是这样的:
BehaviorSubject_值:“正在测试”…
并且在
DriverService
中有空字符串。还有什么想法吗?据我所知,登录和DriverService同时初始化,所以BehaviorSubject的初始值为“”(空字符串)。在drivieService中,第一个值将为“”,因为BehaviorSubject第一个值为空。使用this.loginService.emitLogin(user.value.username)完成应用程序初始化后;将调用并推送正确的。你为什么在这里使用Behavior Subject我想在你的例子中,简单的Subject已经足够了()我认为这些服务并不是同时初始化的,因为当我初始化应用程序时,你首先要做的是通过登录过程,然后你就可以访问
DriversService
。我使用BehaviorSubject是因为我无法使标准主题工作(好吧,BehaviorSubject也不工作lol)。初始化是基于应用程序模块定义进行的。在两个服务中尝试控制台登录构造函数。创建plunker可能是我能帮忙的对不起,我迟到了:plunker来了: