2017-06-21 240 views
3

我是angualr 2的新手。我正在爲練習做一個小應用。我有一個登錄用戶身份驗證服務。這裏是登錄功能。訂閱不存在「訂閱」類型

login(email:string, password:string){ 

     var loginrul="https://filing.herokuapp.com/api/v1/auth/login/"; 
     return this.http.post(loginrul,JSON.stringify({ password: password,email: email }), 
      {headers:new Headers({'Content-Type':'application/json'})} 
      ).map(res=>res.json()). 
      subscribe(
       data => localStorage.setItem('id_token',data.auth_token), 
       error=>console.log(error) 
      ); 
    } 

當我調用該函數在組件angualr給出錯誤「房產認購上鍵入‘認購’不存在。

doLogin(event) { 
     console.log(event); 
     console.log(this.loginForm.value); 


     let formData = this.loginForm.value; 
     let email = this.loginForm.controls.email.value; 
     let password= this.loginForm.controls.password.value; 
     this.auth.login(email,password).subscribe(res =>{ 
      console.log(res); 
      if(res.status===200){ 
       this.router.navigate(['dashboard']); 
      } 
     } 
     ) 
    } 

我想是因爲我使用訂閱爲什麼角是給這個錯誤在登錄功能以及呼叫登錄功能的同時,請提供一些解決方案或替代方法來實現我在登錄功能中試圖實現的結果

+2

只要返回地圖()並訂閱調用者 – Fals

回答

6

您自己分析的問題是正確的!刪除.subscribe在您的服務中,並且僅在您使用它的組件中使用它。您的服務應在.map運營商後返回。

如果您在服務中訂閱,它將返回一個Subscription而不是Observable,這就是爲什麼你會得到你的錯誤。

+0

如果我將data => localStorage.setItem('id_token',data.auth_token)移動到組件中,auth_token在此處可用? –

+0

如果它來自請求中的數據,那麼它應該可用 - 是 –