Установка начальных значений множественной директивы Angular-UI Select2

У меня есть директива 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 и ввод, но он не отображает текст-заполнитель во вводе.

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

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

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

Обновление 1

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

Демонстрация: http://plnkr.co/edit/DgpGyegQxVm7zH1dZIJZ?p=preview

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

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

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

Это помогает, но все еще кажется обходным путем.


person SethBoyd    schedule 20.02.2013    source источник
comment
Можете ли вы создать демо для этого и, возможно, открыть тикет? Если вы использовали initSelection в select2 (это именно то, для чего он предназначен), вы могли бы просто сделать $scope.filters.countries = 'US', но весь код инициализации требует более тщательного тестирования, поэтому мы должны быть уверены, что то, что вы сделали, также поддерживается. Проблема может заключаться в том, что не найдена совпадающая ссылка на выбранный объект.   -  person ProLoser    schedule 20.02.2013
comment
Я отредактировал свой вопрос выше. Спасибо за вашу помощь!   -  person SethBoyd    schedule 21.02.2013
comment
plnkr даже не работает. я ненавижу это   -  person iamwhitebox    schedule 06.03.2013
comment
Вы можете подумать о создании принятого ответа, следуя совету ProLoser.   -  person Stewie    schedule 14.06.2013
comment
Если обновление 1 решило проблему, преобразуйте его в ответ и примите его.   -  person DRaehal    schedule 14.06.2013
comment
Я думаю, что обновление 1 - это ответ, initSelection кажется правильным способом сделать это.   -  person Isaac Zepeda    schedule 08.07.2013


Ответы (2)



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

<option selected value="0">Name</option>
person tomascharad    schedule 19.03.2015