2017-03-27 89 views
1

我是新角2,並沒有找到任何正確的答案發布類似的問題。屬性'訂閱'不存在類型'無效'在角度cli

我正在獲取屬性'訂閱'不存在類型'void'在角度cli中。我嘗試從rxjs導入訂閱,但沒有找到該庫。

Error Image

請幫助解決這個問題。請在下面找到我的服務和組件代碼,我將其稱爲該服務。

// ******************************* 
 

 
// login.service.ts 
 

 
// ******************************* 
 

 
import { Injectable } from '@angular/core'; 
 
import { Http, Response } from '@angular/http'; 
 
import { Observable } from 'rxjs/observable'; 
 
import 'rxjs/add/operator/map'; 
 
import 'rxjs/add/operator/catch'; 
 
import 'rxjs/add/operator/throw'; 
 

 
@Injectable() 
 
export class LoginService { 
 

 
    constructor(private http: Http) { } 
 

 
    getLoginData(){ 
 
    this.http.get('./json/login.json') 
 
     .map((result: Response) => result.json()) 
 
     .catch(this.getError); 
 
    } 
 

 
    private getError(error: Response): Observable<any>{ 
 
     console.log(error); 
 
     return Observable.throw(error.json() || 'Server Issue'); 
 
    } 
 

 
} 
 

 
// ******************************* 
 

 
// login.component.ts 
 

 
// ******************************* 
 

 

 
import { Component } from '@angular/core'; 
 
import { Router } from '@angular/router'; 
 
import { LoginService } from '../login.service'; 
 

 
@Component({ 
 
    selector: 'app-login', 
 
    templateUrl: './login.component.html', 
 
    styleUrls: ['./login.component.css'], 
 
    providers: [LoginService] 
 
}) 
 
export class LoginComponent { 
 
usernameModel: string; 
 
passwordModel: string; 
 
validLogin: Boolean; 
 
    constructor(private router: Router, private loginService: LoginService) { } 
 

 
    homeNav(){ 
 
    if(this.usernameModel === 'jay' && this.passwordModel === 'Jay'){ 
 
     this.validLogin = true; 
 
     this.router.navigate(['/home']); 
 
    } 
 
    else{ 
 
     this.validLogin = false; 
 
     console.log('Login Error'); 
 
    } 
 

 
this.loginService.getLoginData() 
 
    .subscribe(
 
    data => console.log(data) 
 
); 
 

 
    } 
 

 

 

 
}

回答

5

您不必返回觀察到在getLoginData功能。添加return關鍵字和可選返回類型添加到簽名:

getLoginData(): Observable<any>{ 
    return this.http.get('./json/login.json') 
     .map((result: Response) => result.json()) 
     .catch(this.getError); 
    } 
0

您應該返回http電話,並且一定要隨時添加typehinting有你的IDE拿起這些錯誤預先

getLoginData(): Observable<any> { 
    return this.http.get('./json/login.json') 
    .map((result: Response) => result.json()) 
    .catch(this.getError); 
} 
+0

謝謝。現在我發現了一個新的問題,'Module not found:Error:Can not resolve'rxjs/add/operator/throw''....我檢查了rxjs/operator文件夾,我找不到throw.js ...我是否需要在外部添加它? – Jay

+1

正確的導入是'import'rxjs/add/observable/throw''(所以可以觀察到,而不是操作符)。但這些東西都是不必要的,我相信你唯一需要的就是'map'導入 – PierreDuc

+0

謝謝你的工作 – Jay