Angular 行为主体未定义问题
我试图在我的服务中创建一个变量,每当我注入这个服务时,它都是可访问的。但是,我无法填充BehaviorSubject类型的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
登录$
。我检查了一下,但是我很难理解它是如何工作的
组件
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来了: