2017-03-16 64 views
1

即使在我添加了'rxjs/add/operator/map'導入後,映射方法返回「未解析的函數或方法映射()」錯誤。映射函數給出無法解析的函數或方法(映射)

我跟着每一步,我甚至添加了rxjs 5.0.1,我仍然遇到「無法解析的函數或方法」錯誤。你知道如何解決這個問題嗎?

您可以在下面看到示例代碼。

方法,返回「未解析函數或方法錯誤地地圖」:

import { Component, OnInit} from '@angular/core'; 
import { Router } from '@angular/router'; 
import { FormGroup, FormBuilder } from '@angular/forms'; 
import { Http, RequestOptions, Headers, Response } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/Rx'; 

@Component({ 
moduleId: module.id, 
templateUrl: 'navigation.component.html' 

}) 

export class NavigationComponent implements OnInit { 

form: FormGroup; 

myInput = {input1:'',input2:'' } 

webserviceUrl : "https://httpbin.org/get"; 

ngOnInit(): void { } 

constructor(private router: Router) { 

} 

constructor (private http: Http) {} 


onRegister() { 
let headers = new Headers({ 'Content-Type': 'application/json' }); 
let options = new RequestOptions({ headers: headers }); 

return this.http.post(this.webserviceUrl, options) 
    .map(this.myInput) 
    .catch(this.handleError); 


} 

private handleError (error: Response | any) { 

let errMsg: string; 
if (error instanceof Response) { 
    const body = error.json() || ''; 
    const err = body.error || JSON.stringify(body); 
    errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
} else { 
    errMsg = error.message ? error.message : error.toString(); 
} 
console.error(errMsg); 
return Observable.throw(errMsg); 
} 

} 

回答

1

我相信地圖需要,因爲它的參數功能,但你傳遞的對象。這個錯誤可能是打字稿無法找到接受的地圖功能和對象。

+0

不幸的是我用盡了一切辦法來解決這個問題。即使我給出空參數,字符串參數,但它仍然給出相同的錯誤。我相信這與找到一張接受並反對的地圖沒有關係 – user2307786

0

Map使用函數來修改數據。

在你的http文章中,我懷疑你想從http調用中獲取返回值,並將值賦給變量this.myInput。而不是這樣做:

return this.http.post(this.webserviceUrl, options) 
    .map(this.myInput) 
    .catch(this.handleError); 

你可能想返回JSON,然後在subscribe功能onRegister()分配值this.myInput。它應該是這樣的:

onRegister() { 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    return this.http.post(this.webserviceUrl, options) 
     .map(res => res.json()) 
     .catch(this.handleError); 
} 

然後訂閱像這樣:

this.onRegister().subscribe(data => this.myInput = data); 
+1

是的泰勒它是我想要的。但仍然「地圖」說未解決的功能或方法 – user2307786

+0

這聽起來像也許你的npm安裝已損壞。我會刪除你的'node_modules'文件夾,運行'npm cache clean',然後再次運行'npm install'來刷新你的所有依賴關係。在代碼中冗餘的'import'rxjs/Rx';'。你只需要'import'rxjs/add/operator/map';'。 –