我得到以下错误。未捕获的类型错误:this.jsonp.request不是Angular2中的函数。有谁能帮我修一下吗?
我的代码是这样的:
-
RequestService。ts
import {Component} from '@angular/core'; import {JSONP_PROVIDERS, Jsonp,RequestMethod, RequestOptions, URLSearchParams,JSONP_BINDINGS, BaseRequestOptions} from '@angular/http'; import {Injectable} from '@angular/core'; import 'rxjs/add/operator/map'; @Injectable() @Component({ providers: [JSONP_PROVIDERS] }) export class RequestService { constructor(public jsonp?:Jsonp) { this.jsonp = Jsonp; } getValues = (url) => { let _urlParams = new URLSearchParams(); _urlParams.set('contentType', 'application/jsonp; charset=utf-8'); _urlParams.set('dataType', 'jsonp'); _urlParams.set('timeout', '5000'); this.jsonp.request(url + "&callback=JSONP_CALLBACK", { // getting error here contentType: "application/jsonp; charset=utf-8", dataType: 'jsonp', timeout: 5000 }) .map(res => { return res.json(); }) .subscribe(res => { // here some stuffs with response }), err => { console.log('error') }; } }
-
abc.ts
import {RequestService} from './../request_service'; export class ABC { private request:any = new RequestService(); bindValues() { this.request.getValues('http://google.co.in'); // note: url given here is sample } }
Thanks in advance
问题在这一行:
constructor(public jsonp?:Jsonp) {
this.jsonp = Jsonp; // <----
}
如果使用public或private关键字,则不需要设置属性。此外,您可以设置类而不是构造函数参数…
尝试以下操作:
constructor(public jsonp?:Jsonp) {
}
编辑
我觉得你们的装修师有问题。在服务的情况下,您只需要@Injectable
,而不是@Component
(仅用于组件)。
所以我将使用以下代码:
@Injectable()
export class RequestService {
constructor(public jsonp?:Jsonp) {
}
(...)
}
在启动应用程序时设置提供程序:
bootstrap(AppComponent, [ JSONP_PROVIDERS ]);
参见这个问题:
- JSONP调用=>参考错误:文档未定义
要理解如何将依赖注入到服务中,你可以看一下这个描述分层注入器如何工作的问题:
- 在angular 2 (Beta版)中,把一个服务注入另一个服务的最佳方式是什么?