我的app.component
包含网站的<nav>
,该网站使用[routerLink]
转到不同的页面。它导入每个页面的组件。其中一页是登录页面。如果用户没有登录,我希望导航说登录 - 如果用户是,注销。Angular2,EventEmitter上的订阅属性不存在?
在app.component
:
my_userO : userO = undefined;
constructor (private my_userS:userS){
my_userS.userChanged.suscribe(temp => this.updateNav());
updateNav(){
this.my_userO = this.my_userS.getUser();
}
logOut(){
this.my_userS.setUser(undefined);
}
,并在其模板:
<li><a *ngIf="!my_userO" [routerLink]="['LoginPage']">Login</a></li>
<li><a *ngIf="my_userO" [routerLink]="['HomePage']"(click)="logOut()">Logout</a></li>
userS
是一个全球性的服务(这是自举在main.ts
在任何我的组件没有添加作为一个供应商使用它)我看起来像这样:
public userChanged: EventEmitter<{}>
currentUser : userO = undefined;
constructor(private http:Http){
this.userChanged = new EventEmitter();
}
getLogin(username: string, password: string): Promise<userO>{
return this.http.get(this.getLoginUrl+username).toPromise().then(response => response.json().data).catch(this.handleError);
}
getUser(){
return this.currentUser;
}
setUser(x_userO: userO){
this.currentUser = x_userO;
this.userChanged.emit(undefined);
}
在登录页面,我只是运行getLogin
,然后setUser
与前者返回。
我的问题是,我收到错误“属性订阅不存在类型EventEmitter < {}>”。
谢谢...对不起,我不知道为什么它不工作,因为我跟着别人的例子,然后angular.io文档显示订阅属性...我需要更多的睡眠哈哈。它现在编译,但直到后来才能测试。 – Yifan
ugh ... dat facepalm当我一直不明白为什么suscribe没有定义至少半个小时... –