Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 服务中声明的函数获取;不是一个函数;_Angular_Typescript - Fatal编程技术网

Angular 服务中声明的函数获取;不是一个函数;

Angular 服务中声明的函数获取;不是一个函数;,angular,typescript,Angular,Typescript,这是一个服务,为了进行测试,它只返回1,2,3的数组 import {Injectable} from '@angular/core'; @Injectable() export class CitiesService { getCities() { return ['1', '2', '3']; } } AppComponent是一个自动完成框。Formbuilder用于引用输入字段并在中获取用户类型的值 使用C

这是一个服务,为了进行测试,它只返回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);
  }

}
但是我得到了这个错误

例外情况:此.u CitiesService.getCities不是一个函数


您正在尝试将您的(u cities)服务作为表单生成器注入

 constructor(@Inject(FormBuilder) private _CitiesService: CitiesService, private _fb: FormBuilder){
该行表示构造函数的第一个参数
\u CitiesService
,应该使用FormBuilder的提供程序(
@Inject(FormBuilder)
)进行注入。我真诚地怀疑你的本意

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

因此,将您的行更改为:

constructor(private _CitiesService: CitiesService, @Inject(FormBuilder) private _fb: FormBuilder){
或者更好

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

当您在供应商列表中使用它时,为什么要将其作为注射?非常感谢!我很惊讶你的反应如此之快!