2017-06-21 2 views
3

Ich bin neu in Angual 2. Und ich mache eine kleine Anwendung für die Praxis. Ich habe einen Dienst für die Authentifizierung von Benutzern, wenn sie sich einloggen. Und hier ist es Login-Funktion.Subscribe existiert nicht vom Typ 'Abonnement'

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) 
      ); 
    } 

Wenn ich nenne diese Funktion in der Komponente angualr Fehler gibt, dass „Eigentum abonnieren existiert nicht auf Typ‚Abonnement‘.

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']); 
      } 
     } 
     ) 
    } 

Ich denke, warum Winkel diesen Fehler zu geben, weil ich abonnieren bin mit in der Login-Funktion sowie beim Aufruf der Login-Funktion Bitte schlagen Sie eine Lösung oder einen alternativen Ansatz vor, um das Ergebnis zu erreichen, das ich in der Login-Funktion erreichen möchte

+2

Geben Sie einfach die map() zurück und abonnieren Sie beim Aufrufer – Fals

Antwort

6

Ihre eigene Analyse des Problems ist korrekt Entfernen Sie die .subscribe in Ihrem Service und verwenden Sie es nur in Ihrer Komponente, wo Sie es verbrauchen. Ihr Service sollte nach dem Operator .map zurückkehren.

Wenn Sie im Service abonnieren, gibt es eine Subscription anstelle einer Observable, und das ist in der Tat, warum Sie Ihren Fehler erhalten.

+0

Wenn ich Daten => localStorage.setItem ('id_token', data.auth_token) in die Komponente verschiebe, wird auth_token hier verfügbar sein? –

+0

Wenn es von den Daten in der Anfrage kommt, dann sollte es verfügbar sein - ja –

Verwandte Themen