Angular UI Grid: как заполнить выпадающий фильтр реальными данными из базы данных / серверной части

#angularjs #angular-ui-grid #ui-grid

#angularjs #angular-ui-grid #ui-grid

Вопрос:

Я боролся более 1 дня, пытаясь найти решение для предварительного заполнения выпадающего списка angular-ui-grid данными из серверной части. И да, я видел много похожих вопросов, но ни в одном из них не говорится о заполнении selectOption реальными данными из серверной части.

Это отлично работает с предопределенным массивом, подобным этому: $scope.tiposArquivoSelecionados = [{ value: 1, label: 'First'}, { value: 2, label: 'Second'}, { value: 3, label: 'Third'}];

введите описание изображения здесь

Но когда я пытаюсь заполнить selectOption данными, собранными из серверной части, selectOption не отображается. Взгляните:

введите описание изображения здесь

Данные собраны успешно, сетка успешно визуализирована, что заставляет меня думать, что это проблема времени.

Вот список из нескольких обходных путей, которые я пробовал (все неудачно), чтобы решить возможную проблему с синхронизацией:

  • обновите сетку после сбора данных;
  • поместите ссылки на столбцы внутри обратного вызова службы для успешного выполнения
  • поместите ng-if в .html для отображения сетки, только если array.length > 0

Ни один из них не сработал =/


Объявление массива selectOptions:

 $scope.tiposArquivoGridSelectOptions = [];
  

Код из gridOptions.columnDefs:

 {
  field: 'controleArquivoId',
  name: 'Tipo de Arquivo',
  cellClass: 'ui-grid-cell-padding',
  enableFiltering: true,
  enableSorting: true,
  enableHiding: true,
  filter: {
    type: uiGridConstants.filter.SELECT,
    selectOptions: $scope.tiposArquivoGridSelectOptions,
  },
  sort: {
    direction: uiGridConstants.ASC,
    priority: 3
  }
},
  

В моем контроллере у меня есть метод init (), который вызывает службу для сбора данных из серверной части и заполняет массив selectOption.

 AutorizacoesReenvioService.listarTiposArquivoPorAno(moment().year()).then(
  function (success) {
    var responseData = success.data;

    responseData.forEach(function(item) {
      $scope.tiposArquivoGridSelectOptions.push(
        {
          value: item.id,
          label: item.nomeArquivo
        }
      );
    });

    $scope.gridApi.core.refresh();
  },
  function (error) {
    console.error(success.data);
  }
);
  

Комментарии:

1. Я попытался использовать plunker, но не обнаружил проблем… Нет необходимости обновлять сетку. Пожалуйста, проверьте этот плунжер . Выпадающий список переключается нажатием кнопки «переключить фильтрацию».

2. Спасибо @Remko, но проблема в том, когда я пытаюсь заполнить выпадающие параметры данными из серверной части, используя $ http.

3. Это не должно иметь никакого значения. Проверьте плунжер еще раз, я изменил функцию toggleFiltering (теперь она имеет еще меньше смысла ;), но она все еще работает. Не могли бы вы попробовать создать плунжер, показывающий проблему, с которой вы столкнулись, поскольку я не могу воспроизвести вашу проблему?