Подтвердить что ты не робот

Установка начальных значений Angular -UI Select2 multiple directive

У меня есть директива select2 для множественного выбора стран с пользовательским запросом для захвата данных:

// Directive
<input ng-model="filters.countries" ui-select2="filters.countryOptions"
    data-placeholder="Choose a country...">

// filters.countryOptions
{ 
    multiple: true,
    query: function() { 
        get_list_of_countries(); 
    }
}

// Formatted data from remote source
[
    {id: 'US', text: 'United States'},
    {id: 'CA', text: 'Canada'} ...
]

Я пытаюсь установить первоначально выбранные значения в своем контроллере, используя:

$scope.filters.countries = [{id: 'US', text: 'United States'}];

Это правильно устанавливает модель, однако это происходит до того, как произошла инициализация select2. Когда я перехожу через оставшийся код инициализации, вход временно отображает [Object], прежде чем, наконец, погаснет $scope.filters.countries и ввод, но он не отображает текст заполнителя на входе.

Чтобы обойти это, я использую следующее для reset начальное значение модели:

$scope.$on('$viewContentLoaded', function() {
    setTimeout(function() {
        $scope.filters.countries = [{id: 'US', text: 'United States'}];
    }, 100);
});

Кажется, действительно hackish использовать setTimeout. Есть ли лучший способ, который мне не хватает?

Обновление 1

В соответствии с запросом ProLoser здесь представлен демо-и github-билет.

Демо: http://plnkr.co/edit/DgpGyegQxVm7zH1dZIJZ?p=preview

Проблема GitHub: https://github.com/angular-ui/angular-ui/issues/455

Следуя совету ProLoser, я начал использовать функцию select2 initSelection:

initSelection : function (element, callback) {
  callback($(element).data('$ngModelController').$modelValue);
},

Он делает трюк, но все же чувствует себя как обходное решение.

4b9b3361

Ответ 1

В соответствии с запросом ProLoser здесь представлен демо-и github-билет.

Демо: http://plnkr.co/edit/DgpGyegQxVm7zH1dZIJZ?p=preview

Проблема GitHub: https://github.com/angular-ui/angular-ui/issues/455

Следуя совету ProLoser, я начал использовать функцию select2 initSelection:

initSelection : function (element, callback) {
  callback($(element).data('$ngModelController').$modelValue);
},

Он делает трюк, но все же чувствует себя как обходное решение.

Ответ 2

Вы пробовали инициализировать свои параметры как:

<option selected value="0">Name</option>