Chosen.js плохо работает с угловой директивой

Я создал код плунжера для этого вопроса здесь http://plnkr.co/edit/mTaRPoAsQQQ6OSEQLS3a?p=preview

Это HTML-код списка

<select ng-model="modSelectedState" id="inputLocation-" name="filter_location"    
     class="location" ng-options="state as state.full_name for state in states" 
     chosen="states">
<option value="">State</option>

Как вы можете видеть, я создал директиву и назвал ее "selected", вот код:

app.directive('chosen', function ($http) {
var linker = function (scope, element, attr) {
    scope.$watch(scope.states, function (oldVal, newVal) {
        element.trigger('liszt:updated');
    });
    scope.$watch(attr.ngModel, function () {
        element.trigger('liszt:updated');
    });
    element.chosen({disable_search_threshold: 20});
};

return {
    restrict: 'A',
    link: linker
}
});

Пожалуйста, обратите внимание, что я использую более старую версию selected, в которой требуется liszt: updated вместо selected: updated

Я знаю, что состояния заполняются, так как, когда я проверяю код, я вижу их в исходном SELECT. Есть идеи?

1 ответ

Решение

Вы должны установить $watch в директиве на имя переменной в области, которую вы хотите отслеживать. То, что происходило, было то, что часы запускали "триггер" до того, как в списке были элементы.

Я положил несколько логов, чтобы вы могли проверить

http://plnkr.co/edit/mR8WhwvJiDZMG7Nlursg?p=preview

scope.$watch('states', function (newVal, oldVal) {
    element.trigger('liszt:updated');
    $log.info('trigger');            
});
Другие вопросы по тегам