javascript - Angular2, prenumerera egenskap på EventEmitter finns inte?


Min app.component innehåller <nav> på webbplatsen, som använder [routerLink] för att gå till de olika sidorna. Den importerar varje sidas komponenter. En av sidorna är en inloggningssida. Om användaren inte är inloggad vill jag att navigeringen ska säga Logga in - om användaren är inloggad, Logga ut.

I 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);
}

och i dess mall:

<li><a *ngIf="!my_userO" [routerLink]="['LoginPage']">Login</a></li>
<li><a *ngIf="my_userO" [routerLink]="['HomePage']"(click)="logOut()">Logout</a></li>

userS är en global tjänst (den startas upp i main.ts och läggs inte till som en provider i någon av komponenterna jag använder den i) jag har som ser ut så här:

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);
}

På inloggningssidan kör jag bara getLogin och sedan setUser med det som den förstnämnda returnerade.

Mitt problem är att jag får felet "Property suscribe does not exist on type EventEmitter<{}>".

Svar #1

med vscode lade autokomplettering till den här raden:

import { EventEmitter } from 'events';

jag var tvungen att ändra det till följande för att lösa detta.

import { EventEmitter } from '@angular/core';

Svar #2

kontrollera importen av EventEmitter

det borde vara import { EventEmitter } från '@angular/core';

Relaterade artiklar