我正在構建使用Angular 2的應用程序,並且偶然發現了這個問題。執行Ajax調用的時候,我們通常稱他們爲以這種方式:Angular:lambda中的代碼執行不會影響模板
http.post(this.baseUrl + url, data, { headers: headers}).subscribe(
result => {
this.showForm = false;
},
error => {
this.showForm = true;
}
);
的showForm
是Component
一個屬性,它指示何時添加/刪除形式,即:通過設置*ngIf="showForm"
。如果我執行該代碼,那麼當ajax調用成功時,表單將從DOM中移除,如果調用失敗,則表單將停留。這是正確的行爲。
雖然我執行Facebook登錄API時有點不同。按照教程說,代碼應該是這樣的:
FB.getLoginStatus(response => {
if (response.status === 'connected') {
this.showForm = false;
}
else {
this.showForm = true;
}
});
當我執行的代碼,在用戶已經登錄到Facebook和已經在應用程序中籤署的條件(response.status是'conencted'
),代碼將在響應lambda中執行this.showForm = false;
。按照之前的行爲,這應該是從DOM中刪除表單。我試圖在Chrome上進行調試,並確實執行了this.showForm = true;
。
問題是,雖然該行代碼已執行,但表格未被刪除。只有當我執行兩次或三次這個確切的代碼時,表單纔會最終注意到值發生變化並相應地調整視圖。這使得用戶需要點擊Facebook登錄按鈕(它會調用FB.getLoginStatus()
)兩次或三次,然後才能真正登錄。
有沒有解決這個問題?或者我的方式使用FB.getLoginStatus()
是錯誤的?我需要一些啓發。
編輯: 。修正錯誤執行的代碼,其中,如果response.status是'conencted'
,代碼會被執行this.showForm = false;
,而不是this.showForm = true;
這是我以前寫的。
它確實是「連接」。調試器加入了「if」塊。問題不在於我應該檢測連接還是不連接。即使標誌翻轉了,視圖也不會刷新。這是由@Adam Szmyd bellow回答的。 – Kurotsuki