Я создал простой пользовательский AngularJs директиву для этой удивительной JQuery плагин jQuery-Select2 следующим образом:Angularjs Пользовательские Выбор2 директива
Директива
app.directive("select2",function($timeout,$parse){
return {
restrict: 'AC',
link: function(scope, element, attrs) {
$timeout(function() {
$(element).select2();
},200);
}
};
});
Использование в HTML-шаблоны:
<select class="form-control" select2 name="country"
data-ng-model="client.primary_address.country"
ng-options="c.name as c.name for c in client.countries">
<option value="">Select Country</option>
</select>
Работает так, как ожидалось, и мой нормальный 012 Элементзаменен плагинами select2
.
Однако есть одна проблема, хотя иногда она показывает значение по умолчанию i.e Select Country
здесь, хотя в раскрывающемся списке правильное значение модели выбрано автоматически.
Теперь, если я увеличиваю $timeout
интервал от 200
до некоторого высокого значения, скажем 1500
, он работает, но задерживает рендеринг директивы. Также я думаю, что это не является правильным решением для него, так как мои данные загружаются через ajax.
Я также пытался обновить директиву следующим образом, но не повезло в том, что либо:
app.directive("select2",function($timeout,$parse){
return {
restrict: 'AC',
require: 'ngModel',
link: function(scope, element, attrs) {
var modelAccessor = $parse(attrs.ngModel);
$timeout(function() {
$(element).select2();
});
scope.$watch(modelAccessor, function (val) {
if(val) {
$(element).select2("val",val);
}
});
}
};
});
PS: Я знаю, что есть модуль присутствует ui-select подобное, но она не требует какой-то иной разметки в виде <ui-select></ui-select>
, и мое приложение уже полностью разработано, и я просто хочу заменить нормальный флажок select2.
Итак, можете ли вы, пожалуйста, направить меня, как я могу решить эту проблему и убедиться, что директива поддерживает синхронизацию с последним поведением?
Это как-то связано с 'select2'? Если вы удалите директиву 'select2' и сделаете ее обычным элементом выбора, работает ли она так, как ожидалось? –
Да, он работает как ожидалось, если я удалю так. –
Я также использую 'select2' в своем приложении, но я использую [ui-select2] (https://github.com/angular-ui/ui-select2), который для него является оберткой Angular, которая теперь устарела , Select2 вызвал у меня много горя, я предлагаю вам избежать этого, если вы можете :) –