2017-08-08 74 views
0

我試圖設置一個簡單的錯誤通知組件,而在Visual Studio中調試,訂閱,這個似乎是未定義的。RxJS:爲什麼'訂閱'內未定義

public notifications: NotificationMessage[]; 

constructor(notificationService: NotificationService) { 
    this.notifications = []; //'this' is defined here 

    notificationService.rxEmitter.subscribe((notificationMessages: any) => { 
     this.notifications = notificationMessages; //'this' is undefined here 
    }); 
} 

編輯:這Screenshot從VS.斷點被未定義有趣的是,'_this',does存在於運行時,儘管我無法引用它,因爲typescript會在編譯時引發未找到的錯誤。

+0

這是不太可能的。箭頭功能不能像那樣工作。實際代碼與您發佈的實際代碼不同,或者您在其他地方發生錯誤。考慮提供http://stackoverflow.com/help/mcve可以複製這個問題,一個普朗克會沒事的。 – estus

+0

您是否嘗試將訂閱呼叫置於ngOnInit方法中?它看起來像是在構造函數實際創建對象之前調用的,所以此時此處未定義。 – Supamiu

+0

@Supamiu不應該這樣,op應該提供一個plnkr,因爲代碼對我來說似乎很好 –

回答

0

事實證明,視覺工作室調試器給了我一個紅鯡魚說這是未定義的。用console.log測試出了一個有效的輸出。

Visual Studio在使用箭頭函數時遇到了問題。 Typescript編譯_this

compiled js of NotifierComponent

如果你從內創建一個斷點訂閱和檢查這個,視覺工作室調試器會檢查在生成的JavaScript代碼之上的匿名功能,再也找不到

解決方法是檢查而不是此

這篇文章似乎描述我的問題。

https://typescript.codeplex.com/workitem/1655