2017-03-27 91 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