5

我正在尝试使用我的应用程序中的指令来实现 jQuery 多选插件。这是选择元素:

<select multiple 
        ng-model="data.partyIds" 
        ng-options="party.id as party.name for party in parties" 
        xs-multiselect="parties">
</select>

模型parties模型通过 $http 加载。多选插件解析option里面的元素select并生成漂亮的多选。

有没有办法检测select元素何时填充了选项,以便我可以告诉多选插件更新其数据?

这是我的指令:

machineXs.directive("xsMultiselect", function() {
    return {
        restrict: "A",
        require: '?ngModel',
        link: function(scope, element, attrs, ngModel) {
            element.multiselect().multiselectfilter();
            scope.$watch(scope[attrs["xsMultiselect"]], function() {
                // I tried watching but it doesn't help
                element.multiselect('refresh');
                element.multiselectfilter("updateCache");
            });
        }
    }
});
4

1 回答 1

5

如评论中所述,使用

scope.$watch(attrs.xsMultiselect, ...)

我不确定手表何时触发与 ngOptions 何时更新 DOM。如果您发现手表触发太早,您可以尝试使用$evalAsync()或 $timeout()。$evalAsync 将稍后执行,但在 DOM 呈现之前。$timeout() 将在 DOM 渲染之后执行。

scope.$watch(attrs.xsMultiselect, function() {
   scope.$evalAsync(function() {
      element.multiselect('refresh');
      element.multiselectfilter("updateCache");
   });
});

或者,在 DOM 呈现之后:

scope.$watch(attrs.xsMultiselect, function() {
   $timeout(function() {
      element.multiselect('refresh');
      element.multiselectfilter("updateCache");
   });
});
于 2013-03-13T18:41:22.083 回答