gpt4 book ai didi

angular 2 从路由器导出组件更新应用程序组件

转载 作者:太空狗 更新时间:2023-10-29 17:35:04 24 4
gpt4 key购买 nike

我正在使用 angular 2 rc1 和新路由器@angular/router

在应用程序组件中,我有一个导航部分和路由器 socket

<nav>   
<a *ngIf="auth?.userName == null" [routerLink]="['/login']">Login</a>
<a *ngIf="auth?.userName != null" (click)="logout()">Logout</a>
{{auth?.userName}}
</nav>
<router-outlet></router-outlet>

我将 loginService 注入(inject)到应用程序组件中并在 ngOnInit 中订阅一个事件

ngOnInit() {
this.loginService.loginSuccess.subscribe(this.loginSuccess);

}
ngOnDestroy() {
this.loginService.loginSuccess.unsubscribe();
}
private loginSuccess(res: IAuthResponse) {
this.auth = res;
}

当我导航到我的“/login”路由页面/组件时,我的 loginService 被注入(inject)并且 loginService 定义了一个事件

@Output() loginSuccess = new EventEmitter<IAuthResponse>();

成功登录我的服务后,登录服务引发事件

this.loginSuccess.next(response);

我可以在订阅的 loginSucess 上的应用程序组件中设置断点并传递数据,但是“this”未定义。

private loginSuccess(res: IAuthResponse) {
this.auth = res; //this is undefind
}

如何根据路由器 socket 中托管的组件中使用的服务触发的事件更新应用程序组件

最佳答案

不确定“并且数据已传递”是什么意思。

@Output() loginSuccess = new EventEmitter<IAuthResponse>();

在路由器添加的组件中(LoginComponent)不做任何事情。不支持路由组件中的 @Input()@Output()

只需将 LoginService 注入(inject)路由组件并使用登录组件中的可观察对象发出事件。

@Injectable() 
export class LoginService {
changes:BehaviorSubject = new BehaviorSubject(false);
}
export class LoginComponent {
constructor(private loginService:LoginService) {}

onLogin() {
this.loginService.changes.next(true);
}
}
export class NavComponent {
constructor(private loginService:LoginService) {}

onLogin() {
this.loginService.changes.subscribe(status => this.isLoggedIn = status);
}
}

关于angular 2 从路由器导出组件更新应用程序组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37192619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com