Chosen.js不适用于Angular指令

时间:2014-09-20 21:02:01

标签: javascript jquery angularjs jquery-chosen

我在http://plnkr.co/edit/mTaRPoAsQQQ6OSEQLS3a?p=preview

为此问题创建了一个plunker代码

这是列表的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>

正如你所看到的,我创建了一个指令并将其命名为#34;选择&#34;,这里是代码:

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
}
});

请注意,我使用的是旧版本的选择&#34;这需要&#39; liszt:更新&#39;而不是选择:更新&#39;

我知道状态正在填充,因为当我检查代码时,我可以在原始SELECT中看到它们。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您必须将指令上的$ watch设置为您需要监视的作用域上的变量名称。发生的事情是手表正在运行触发器&#39;在列表之前有元素。

我放了一些$日志,所以你可以检查

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

scope.$watch('states', function (newVal, oldVal) {
    element.trigger('liszt:updated');
    $log.info('trigger');            
});