2013-02-20 32 views
21

Tôi có một chỉ thị Select2 cho nhiều lựa chọn của các quốc gia có một truy vấn tùy chỉnh để lấy dữ liệu:Thiết giá trị ban đầu của chỉ thị góc-UI Select2 nhiều

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

Tôi đang cố gắng để thiết lập các giá trị ban đầu được lựa chọn trong bộ điều khiển của tôi bằng cách sử dụng:

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

Điều này thực hiện đúng mô hình, tuy nhiên điều này xảy ra trước khi khởi tạo select2 đã xảy ra. Khi tôi bước qua mã khởi tạo còn lại, đầu vào tạm thời hiển thị [Object] trước khi xóa hết $scope.filters.countries và đầu vào, nhưng nó không hiển thị văn bản trình giữ chỗ trong đầu vào.

Để làm được việc này tôi đang sử dụng sau đây để thiết lập lại giá trị ban đầu của mô hình:

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

Có vẻ như thực sự hackish để được sử dụng một setTimeout. Có cách nào tốt hơn mà tôi đang thiếu?

Cập nhật 1

Theo yêu cầu của ProLoser đây là vé demo và github.

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

GitHub Vấn đề: https://github.com/angular-ui/angular-ui/issues/455

Sau lời khuyên ProLoser của tôi bắt đầu sử dụng chức năng initSelection Select2 của:

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

Nó lừa nhưng vẫn cảm thấy như một cách giải quyết.

+1

Bạn có thể tạo một bản demo cho điều này và có thể mở một vé? Nếu bạn sử dụng 'initSelection' trong select2 (cụ thể là cái này được thiết kế cho) bạn chỉ có thể làm' $ scope.filters.countries = 'US'' nhưng toàn bộ mã init cần kiểm tra kỹ lưỡng hơn để chúng ta nên chắc chắn rằng những gì bạn đã làm cũng được hỗ trợ. Nó có thể là một vấn đề với việc không tìm thấy một tham chiếu phù hợp với đối tượng đã chọn – ProLoser

+0

Tôi đã chỉnh sửa câu hỏi của mình ở trên. Cảm ơn bạn đã giúp đỡ! – SethBoyd

+0

thậm chí không hoạt động. tôi ghét rằng – iamwhitebox

Trả lời

8

Theo yêu cầu của ProLoser, đây là bản trình diễn và vé github.

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

GitHub Vấn đề: https://github.com/angular-ui/angular-ui/issues/455

Sau lời khuyên ProLoser của tôi bắt đầu sử dụng chức năng initSelection Select2 của:

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

Nó lừa nhưng vẫn cảm thấy như một cách giải quyết.

-1

Các bạn đã thử initialising lựa chọn của bạn như:

<option selected value="0">Name</option> 
Các vấn đề liên quan