массив не привязан для выбора с помощью AngularJs

0

Я собираю коллекцию под названием CommandGroup, как это

        function getCommandGroups() {
        $scope.commandGroups = commandGroupResource.query();

        return $scope.commandGroups.$promise.then(function (response) {

            $scope.commandGroups = response;

        });

    }

мой html выглядит так.

                        <select ng-model="vm.Job.CommandGroup" name="ddlCommandGroup" bootstrap-dropdown>
                        <option value="">Select Something</option>
                        <option ng-repeat="cmdGroup in commandGroups" value="{{cmdGroup.Id}}">{{cmdGroup.Name}}</option>
                    </select>

по какой-то причине падение остается пустым. Функция getCommandGroups() вызывает обратную связь и заполняет commandGroups массивом объектов, каждый из которых имеет идентификатор и имя.

Пожалуйста помоги.

Изображение 174551

ОБНОВИТЬ

я понял, что что-то не так с директивным бутстрапом-выпадающим списком, который требуется, поскольку это Bootstrap-select

angular
.module('app').directive('bootstrapDropdown', ['$timeout',
    function ($timeout) {
        return {
            restrict: 'A',
            require: '?ngModel',
            link: function (scope, element, attrs, ngModel) {                  
                $timeout(function () {
                    element.selectpicker();
                });
            }
        };
    }
]);
  • 0
    Не могли бы вы подтвердить, что response имеет это значение?
  • 0
    да ответ в порядке
Показать ещё 7 комментариев
Теги:
select
angular-promise

3 ответа

2
Лучший ответ

Я считаю, что проблема заключается в том, что сторонний JavaScript (bootstrap-select) не получает информацию об изменении. Вероятно, вам придется вызвать selectpicker ('refresh') в элементе после назначения ответа командамGroups.

Обновление: также необходимо использовать $ scope. $ Apply() перед вызовом selectpicker ('refresh'):

function getCommandGroups() {
    $scope.commandGroups = commandGroupResource.query();

    return $scope.commandGroups.$promise.then(function (response) {
        $scope.commandGroups = response;
        $scope.$apply();
        $('.mySelect').selectpicker('refresh'); 
    });
}

См. Комментарий ниже для вилки Taylor Buchanan Plunk, чтобы увидеть это в действии.

Обновление 2: используйте таймаут вместо этого, чтобы предотвратить ошибку "дайджест уже выполняется":

function getCommandGroups() {
   $scope.commandGroups = commandGroupResource.query();

   return $scope.commandGroups.$promise.then(function (response) {
        $scope.commandGroups = response;
        $timeout(
           function(){
               $('.mySelect').selectpicker('refresh'); 
           }
        );
   });
}
  • 0
    я добавил class = "mySelect" в html и $ scope.commandGroups = response; $ ( 'MySelect ') selectpicker (' Обновить'). все еще не повезло.
  • 0
    Что произойдет, если вы закомментируете строку element.selectpicker в директиве bootstrapDropdown, просто для устранения неполадок? Вы должны увидеть обычное поле выбора, обновляется ли оно после того, как вы присвоили новое значение commandGroups? Если нет, поможет ли после этого добавить $ scope. $ Apply ()?
Показать ещё 10 комментариев
1

Этот список содержит точный код, который вы предоставили, за исключением директивы bootstrap-dropdown и вашего фактического веб-сервиса. Код функционирует так, как ожидалось. Это указывает на наличие проблемы в другом месте кода, который вы не предоставили.

Возможные проблемы:

  1. Директива bootstrap-dropdown делает что-то смешное.

    а. UPDATE: директива работает "отлично" в этом плунге. Не уверен, что он должен делать, но это не вызывает поведение, которое вы описываете.

  2. В вашей разметке отсутствует ng-controller.

  3. Что-то еще, что мы не можем видеть, это очистить $ scope.commandGroups.

  • 0
    я обновил свой вопрос что-то не так с директивой.
0

Переназначение $ scope.commandGroups может мешать циклу дайджеста обещания/объема. Попробуйте изменить функцию следующим образом:

function getCommandGroups() {
    commandGroupResource.query().$promise.then(function (response) {
        $scope.commandGroups = response;
    });
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню