Присвоение списка выпадающему внутри метода подписки - PullRequest
2 голосов
/ 06 июня 2019

Я пытаюсь заполнить NgMultiSelectDropDown, используя некоторые данные, извлеченные из базы данных, используя метод подписки.Список, который будет назначен раскрывающемуся списку, заполняется в методе подписки.

a = [];
ddlList = [];
public jsonString: string = "";
public insrdList: Array < InsuredData > = [];
public insrdList1: InsuredData[];
constructor(
  http: HttpClient,
  @Inject('BASE_URL') baseUrl: string,
  private _cmsService: CMSService) {
  http.get < WeatherForecast[] > (baseUrl +
    'api/SampleData/WeatherForecasts').subscribe(result => {
    this.forecasts = result;
  }, error => console.error(error));
  this._cmsService.getAllInsuredNames().subscribe(res => {
    var i = 0;
    for (var k in res) {
      i++;
      this.ddlList.push(
        {
          "item_id": i,
          "item_text": (res)[k].insuredName
        }
      };
    }
    this.a = this.ddlList;
  }, error => console.error(error));
}

Моя проблема в том, что когда я пытаюсь связать dropdown с ddlList, он не работает.Но когда я связываю его с a, он работает.

<ng-multiselect-dropdown [placeholder]="'custom placeholder'" [data]="a" [(ngModel)]="selectedItems" [settings]="dropdownSettings" (onSelect)="onItemSelect($event)" (onSelectAll)="onSelectAll($event)">
</ng-multiselect-dropdown>  

Почему это происходит?

1 Ответ

4 голосов
/ 06 июня 2019

MultiSelectComponent применяется ChangeDetectionStrategy.OnPush.Он работает путем сравнения ссылок на входы компонента.В случае ddlList вы не изменили ссылку на объект (массив в javascript - это объект), и детектор изменений OnPush не сработал.В случае a ссылка на массив a была изменена в этой части:

this.a = this.ddlList;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...