我的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沒有定義至少半個小時... –