【发布时间】:2015-11-25 14:24:49
【问题描述】:
我正在处理一个包含multiselect jQuery plugin 的指令。我的目标是将以下 HTML 转换为动态多选:
<select multiselect multiple ng-model="selected">
<option>Static option 1</option>
<option>Static option 2</option>
<option ng-repeat="value in values">{{value}}</option>
</select>
请注意,可以直接添加选项,也可以使用 ng-repeat 迭代动态选项。
这是我编写指令的方式:
app.directive('multiselect', function () {
return {
restrict: 'A',
scope: {
model: '='
},
transclude: true,
require: 'ngModel',
link: function (scope, element, attrs, controller, transclude) {
transclude(function (clone) {
element.append(clone);
$(element).multiselect();
});
}
};
});
问题在于,虽然该指令有效并用 jQuery 多选插件替换 HTML,但它只显示静态提供的选项。插件不会显示使用 ng-repeat 创建的选项,即使它们可以在 Angular 呈现的 HTML 源代码中看到。插件创建多选后,似乎将 transclude 克隆附加到元素。
Here's the JSFiddle 重现了这个问题。
我的理解正确吗?这种行为的原因可能是什么?
【问题讨论】:
-
看起来克隆中的角度需要在附加到元素后进行评估。如果您在 multiselect() 上设置超时(不是一个好的解决方案,但会显示问题),则会显示动态选项。我认为在 transclude 功能(主要是多选部分)完成或暂停之前不会生成动态选项。
-
谢谢,说得好。我将对此进行进一步评估,并希望找到所需的解决方案。
标签: javascript jquery angularjs angularjs-directive