私のapp.component
には、ウェブサイトの<nav>
が含まれています。[routerLink]
を使用すると、別のページに移動します。各ページのコンポーネントをインポートします。 1つはログインページです。ユーザーがログインしていない場合は、「ログイン」(ユーザーが「ログアウト」の場合)と言うナビゲーションが必要です。Angular2、EventEmitterのsubscribeプロパティは存在しませんか?
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);
}
とそのテンプレートで:
app.component
で
<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のdocがsubscribeプロパティを示しました...もっと睡眠を取る必要があります。今コンパイルしますが、後でテストすることはできません。 – Yifan
ugh ... dat facepalm私はsuscribeが少なくとも30分は定義されていない理由を理解していないときに... –