2017-09-27 114 views
1

我有一個登錄函數,我只想在登錄有效時將數據存儲在localstorage中,但在我的情況下,即使登錄無效,它仍然存儲數據在本地存儲。Angular 4 - 在登錄成功時將數據存儲在localStorage中

組件

onSubmit = function(formData) { 
    this._membersService.login(formData); 
    localStorage.setItem('loginSessId', formData.acct_username); 
} 

服務

login(data) { 
    return this._http.post('http://localhost/membership/main/login', data) 
    .subscribe(data => data); 
} 
+0

以及你在哪裏處理登錄失敗?從這段代碼中,即使登錄失敗,localStorage.setItem()似乎也會被執行; – faboolous

回答

1

你必須在組件認購,並有成功的這樣,只有當你能做到這一點:

組件

onSubmit = function(formData) { 
    this._membersService.login(formData).subscribe((response) => { 
    localStorage.setItem('loginSessId', formData.acct_username); 
    }, 
    (err) => console.log(err) 
); 
} 

服務

login(data) { 
    return this._http.post('http://localhost/membership/main/login', data); 
} 
+0

很好,這個工作,我剛剛添加一個條件,當response.text()成功,然後本地存儲將執行 – edizonv

+0

真棒,你可以使用httpClient而不是http來投射它,所以你有一個json對象在訂閱的響應,使用map運算符並將其作爲json返回(如果您不想通過httpClient更改服務)。請註冊並接受以解決問題。 – Sonicd300

+0

我仍然有權投票。 ahhh我的代碼是這樣if(response.text()){// localStorage},什麼是最好的abd最安全的方法? – edizonv