2016-07-07 63 views
1

我的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 < {}>」。

回答

3

它是一個錯字

使用訂閱,不suscribe

我沒有足夠的信譽來回答科拉姆波紋管,但是這是完全不正確的。

1)emit()返回void 2)EventEmitter extends(繼承)Subject是一個observable和observer。

出口聲明類EventEmitter擴展主題

的EventEmitter是rxjs主題有一些修改,最值得注意的是它不使用next()的發送值往下流,但使用發射()。 它還允許設置異步邏輯,在異步邏輯中發射將是異步的。

+0

謝謝...對不起,我不知道爲什麼它不工作,因爲我跟着別人的例子,然後angular.io文檔顯示訂閱屬性...我需要更多的睡眠哈哈。它現在編譯,但直到後來才能測試。 – Yifan

+0

ugh ... dat facepalm當我一直不明白爲什麼suscribe沒有定義至少半個小時... –