2016-08-22 70 views
0

我無法讓我的事件發射器在承諾時的方法中正常運行。我沒有收到任何錯誤。它只是根本不會調用在角2中承諾調用事件發射器

的子組件

,:

@Output() isLoggingIn = new EventEmitter<boolean>(); 

onLogin() { 
    this.isLoggingIn.emit(true); //<-- this gets called, so it works. 
    this.authService.loginUser(this.loginForm.value) 
    .then(() => { 
     console.log(this.isLoggingIn.emit); //<-- This logs out the method. 
     this.isLoggingIn.emit(false); //<-- This doesn't get called! 
    }) 
    .catch((err) => console.log(err)); 
} 

這是父組件的HTML模板,header.component.html:

<tas-loginform 
    (isLoggingIn)="setLoginLoading($event)" 
    *ngIf="!isSigningUp"> 
</tas-loginform> 

這是父組件打字稿代碼,header.component.ts:

setLoginLoading(bool: boolean) { 
    console.log(bool); 
    this.loginLoading = bool; 
} 

這幾乎就好像事件發射器在promi中調用因爲它不會運行setLoginLoading的console.log,所以回調永遠不會被調用。而且它更加困難,因爲根本沒有錯誤信息。

+0

你確定'.then()'處理程序中的'this'是否指向你想要的對象?我記得上次我在JS工作時,這是一個棘手的問題。 – Douglas

+0

我確定。我做了一個plunkr,試圖複製這個問題。但是plunkr實際上工作,而我的代碼沒有。我猜可能還有其他的事情...... http://embed.plnkr.co/l50UlTSAh3p102lG5Db9/ – TheMarlow

+0

也許你加載區和polyfills的順序? –

回答

0

這個問題與路由如何搞亂我的身份驗證狀態有關。我真的無法解釋它。我在我的項目中拿出了路由,並且不知何故,一切都很好。