在服务中声明的函数获取"不是函数"

时间:2017-03-15 18:57:01

标签: angular typescript

这是一项服务,为了测试它只返回1,2,3的数组

import {Injectable} from '@angular/core';

    @Injectable()
    export class CitiesService {

        getCities() {
          return ['1', '2', '3'];
        }
    }

AppComponent是一个自动完成框。 Formbuilder用于引用输入字段并获取值用户类型。

使用CitiesService的目的是从json文件中获取城市列表。

import { Component, Inject } from '@angular/core';
import { Observable } from 'rxjs/RX';
import { FormBuilder, FormGroup, FormsModule } from '@angular/forms';
import { CitiesService } from './cities.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  providers: [CitiesService]
})
export class AppComponent {
  form: FormGroup;
  searchTerm: string;

  constructor(@Inject(FormBuilder) private _CitiesService: CitiesService, private _fb: FormBuilder){
    var a = this._CitiesService.getCities();
    this.form = _fb.group({
      search: []
    });
    var search = this.form.controls['search'];
    search.valueChanges
          .subscribe(data => this.searchTerm = data);
  }

}

但是我收到了这个错误

  

EXCEPTION:this._CitiesService.getCities不是函数

1 个答案:

答案 0 :(得分:1)

您正在尝试将_CitiesService注入FormBuilder

 constructor(@Inject(FormBuilder) private _CitiesService: CitiesService, private _fb: FormBuilder){

该行说明您的构造函数_CitiesService的第一个参数应该使用FormBuilder的提供程序(@Inject(FormBuilder))注入。我真诚地怀疑这是你的意思。

相反,删除@Inject(FormBuilder) - 首先,除非构造函数参数的类型与用于注册为提供者的类型不匹配,否则不需要它。其次,即使你真的想要使用它,你也必须将@Inject放在它所适用的参数前面。

因此,请将您的行更改为:

constructor(private _CitiesService: CitiesService, @Inject(FormBuilder) private _fb: FormBuilder){

或者最好是

constructor(private _CitiesService: CitiesService, private _fb: FormBuilder){