2017-03-15 103 views
0

这是一种服务,以测试它只是返回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); 
    } 

} 

但我得到这个错误

例外:this._CitiesService.getCities不是一个函数

+0

因此,改变你的行? – Aravind

回答

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){ 
+0

非常感谢!我很惊讶你回复的速度有多快! –

相关问题