如何解决服务的“未定义”问题?

时间:2019-08-21 11:09:20

标签: javascript angular typescript rest api

每次下拉选项更改时,我都会在Angular7中调用服务。但是,当我在下拉菜单中更改选定的选项时,会出现getAllByCountryId of undefined错误。

这是调用http服务的功能:

countryOnChange(countryId: Guid) {
    this.cityService.getAllByCountryId(countryId).subscribe(
      res => {
        if (res.code === ResponseCode.success) {
          res.dataList.map(item => {
            this.cities.push({
              value: item.id.toString(),
              label: item.dataValue
            });
          });

          if (this.formComponent !== undefined) {
            this.formComponent.form.controls['cityId'].patchValue(this.cities);
          }
        }
      },
      err => {
        this.error = true;
      });
  }

以下是HTML代码,在每次下拉选项更改时调用上述函数:

<ng-container *ngSwitchCase="'dropdown'" class="col-md-12">
    <ng-select [ngClass]="'ng-select'" [options]="input.options" [formControlName]="input.key" [id]="input.key" (selected)="input.onChange($event.value)"></ng-select>
</ng-container>

input.onChange($event.value)countryOnChange连接在后端。

以下是调用 countryOnChange 函数的方法:

const dropdown2 = new InputDropdown({
      key: 'countryId',
      label: '',
      onChange: this.countryOnChange,
      options: this.countries,
      value: '',
      required: true,
      order: 3
    });

Error http://prntscr.com/ovjxe7

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

我认为需要[ngModel]:

  <select [ngModel]="selectedValue" (ngModelChange)="onDropdownChange($event)" 
   class="form-control">
            <option *ngFor="let category of categorylist" [ngValue]="category.id"> 
         {{category.Description}}</option>
   </select>  

请参阅:Angular 2 How to bind selected id in Dropdownlist with model?

答案 1 :(得分:0)

getAllByCountryId of undefined错误表示您得到this.cityService的未定义。 在创建InputDropDown时,请检查函数与哪个this上下文绑定。可能您需要像这样定义它:-

const dropdown2 = new InputDropdown({
      key: 'countryId',
      label: '',
      onChange: this.countryOnChange.bind(this),
      options: this.countries.bind(this),
      value: '',
      required: true,
      order: 3
});

希望这会有所帮助。