未捕获的TypeError:this.jsonp.request不是Angular2中的函数

时间:2016-08-08 13:47:51

标签: angular angular2-services

我收到以下错误。 未捕获的TypeError:this.jsonp.request不是Angular2中的函数。任何人都可以帮我解决这个问题。

我的代码会喜欢这个:

  1. 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')
     };
    
    }
    }
    
  2. 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
          }
       }
    
  3. 提前致谢

1 个答案:

答案 0 :(得分:0)

问题出在这一行:

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 ]);

看到这个问题:

要了解如何将依赖项注入服务,您可以查看描述分层注入器如何工作的问题: