2013-02-20 21 views
21

mam dyrektywę select2 dla wielokrotnością wybierz krajów z kwerendy niestandardowej chwycić dane:Ustawienie początkowe wartości dyrektywy Kątowymi-UI Wybór2 wielokrotny

// 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'} ... 
] 

Próbuję ustawić wstępnie wybranych wartości w moim kontrolerze przy użyciu:

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

To poprawnie ustawia model, jednak dzieje się to przed wystąpieniem inicjalizacji select2. Gdy przechodzę przez pozostały kod inicjujący, dane wejściowe tymczasowo wyświetlają [Object] przed ostatecznym wygaśnięciem $scope.filters.countries i wejściem, ale nie wyświetlają tekstu zastępczego na wejściu.

Aby obejść ten problem Używam następujących czynności, aby zresetować wartość początkową modelach:

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

Wydaje się naprawdę hackish się używając setTimeout. Czy istnieje lepszy sposób, którego mi brakuje?

Update 1

Zgodnie z wnioskiem ProLoser o to demo i bilet GitHub.

Demo: http://plnkr.co/edit/DgpGyegQxVm7zH1dZIJZ?p=preview

GitHub Problem: https://github.com/angular-ui/angular-ui/issues/455

Za radą ProLoser za zacząłem używać funkcji select2 za initSelection:

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

To załatwia sprawę, ale nadal czuje się jak obejść.

+1

można stworzyć demo do tego i może otworzyć bilet? Jeśli użyłeś 'initSelection' w select2 (co jest dokładnie przeznaczone dla tego), możesz po prostu zrobić' $ scope.filters.countries = 'US'', ale cały kod init potrzebuje więcej dokładniejszych testów, więc powinniśmy być na pewno to, co zrobiłeś, jest również wspierane. Może to być problem z nieodnalezieniem pasującego odwołania do wybranego obiektu. – ProLoser

+0

Edytowałem moje pytanie powyżej. Dzięki za pomoc! – SethBoyd

+0

plnkr nawet nie działa. Nienawidzę tego – iamwhitebox

Odpowiedz

-1

Czy próbowałeś inicjalizacji opcje jak:

<option selected value="0">Name</option> 
Powiązane problemy