2017-03-16 113 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';'。 –