2012-12-20 5 views
0

Я использую директиву AngularUI ui-select2 с AJAX.AngularUI select2 AJAX, установленный через модель

Вот что у меня есть, на мой взгляд:

<label>Group: <input ng-model="group" ui-select2="select2GroupConfig"></label> 

Вот что я имею в моей модели:

$scope.select2GroupConfig = { 
    ajax: { 
     url: 'theURL', 
     data: function (term, page) 
     { 
      return { q: term }; 
     }, 
     results: function (data, page) 
     { 
      return { results: data }; 
     } 
    } 
}; 

Это работает, как ожидалось.


Мой вопрос: Как я могу изменить значение с помощью модели?

Я пробовал:

$scope.group = 'some group'; 

Я также попытался с помощью объекта:

$scope.group = { id: 32, text: 'some group'}; 

но не либо работу.

Как вы обновляете select2, который использует AJAX, через модель?

ответ

1

Оказывается, вы можете установить его объекту, но только после ui-select2 работает; Я пытался дать ему первоначальное значение.

Таким образом, вместо того, чтобы использовать обычную модель, вы должны использовать select2 «s initSelection функции:

$scope.group = 'Dummy Content'; 

$scope.select2GroupConfig.initSelection = function (el, fn) { 
    fn({ id: 2, text: 'Some group' }); 
} 

Обратите внимание, что вы должны дать на вход начальное значение, в противном случае initSelection никогда не вызывается. Вот почему я просто настраиваю его на какой-то фиктивный контент.


Это работает, но это похоже на хак.

Есть ли у кого-нибудь лучшие идеи?

+0

«Обратите внимание, что вы должны указать начальное значение« . Я видел этот комментарий во многих местах, но как сделать начальное значение. Я пробовал установить его с помощью ng-модели, но, похоже, не запускает initSelection – aamiri

0

Если у вас есть настройка initSelection, вы можете передать только идентификатор, и директива потянет весь объект строки.

Это также позволит вам установить значение, когда страница загружается только с идентификатором.

Если вы не хотите использовать initSelection, вы можете установить всю строку (объект) в качестве значения, и select2 будет соответствующим образом обновляться. Однако все зависит от вашего прецедента.