簡體   English   中英

Angular2,EventEmitter 上的訂閱屬性不存在?

[英]Angular2, subscribe property on EventEmitter not existing?

我的app.component包含網站的<nav> ,它使用[routerLink]轉到不同的頁面。 它導入每個頁面的組件。 其中一個頁面是登錄頁面。 如果用戶未登錄,我希望導航顯示登錄 - 如果用戶登錄,則注銷。

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<{}> 上不存在屬性訂閱”。

使用 vscode,自動完成添加了這一行:

從'事件'導入{EventEmitter};

我不得不將其更改為以下內容以解決此問題。:

從' @angular/core '導入{EventEmitter};

這是一個錯字

使用subscribe ,而不是suscribe

我沒有足夠的聲譽來回答下面的 Colum,但這完全不正確。

  1. emit()返回無效
  2. EventEmitter擴展(繼承) Subject ,它是一個 observable 和一個觀察者。

     export declare class EventEmitter<T> extends Subject<T>

EventEmitter是一個經過一些修改的 rxjs Subject,最值得注意的是它不使用 next() 向流中發送值,而是使用 emit()。 它還允許設置異步邏輯,其中發射將是異步的。

檢查 EventEmitter 的導入

它應該是import { EventEmitter } from '@angular/core';

它沒有 subscribe 方法,因為它不返回 observable。

然而EventEmitteremit()方法確實返回一個可觀察對象,因此您需要創建一個連接到所發出事件的輸入。 然后你可以訂閱這個。

看看這個: http : //www.syntaxsuccess.com/viewarticle/unit-testing-eventemitter-in-angular-2.0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM