Я боролся более 1 дня, пытаясь найти решение для предварительного заполнения раскрывающегося списка angular-ui-grid данными из бэкэнда.И да, я видел много похожих вопросов, но ни один из них не говорит о заполнении selectOption реальными данными из бэкэнда.
Он отлично работает с предопределенным массивом, например так: $scope.tiposArquivoSelecionados = [{ value: 1, label: 'First'}, { value: 2, label: 'Second'}, { value: 3, label: 'Third'}];
Но когда я пытаюсь заполнить selectOption данными, полученными из бэкэнда, selectOption не отображается.Взгляните:
Данные собраны успешно, сетка отрисована успешно, что заставляет меня думать, что это проблема синхронизации.
Вот список нескольких обходных путей, которые я попытался (все не удалось), чтобы решить возможную проблему синхронизации:
- обновить сетку после сбора данных;
- поместите columnDefs внутри обратного вызова службы успеха
- поместите 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);
}
);