我使用以下代码使用AngularJS填充选择框:
<select ng-model="department"
ng-options="dept as dept.name for dept in departmentList"
class="fancy">
<option value="">-- select an option --</option>
</select>
但是我需要使用SelectBoxIt jquery插件来呈现此SELECT框。
SELECT的硬编码版本可以正常工作,因为我在处理页面此部分的 Controller 的底部进行了SelectBoxIt的初始化:
$targetSelects.selectBoxIt({
theme: "bootstrap"
, downArrowIcon: "arrow"
, showFirstOption: false
});
$targetSelects.on({
"open" : onOpen
, "close" : onClose
});
我现在认为SelectBoxIt初始化发生在填充 Angular 填充的SELECT框之前。
这似乎有可能吗?如果是这样,我该如何解决?我在想这可能是使用Deferred对象的情况,但不确定将其注入(inject)哪里。
任何帮助,将不胜感激。
更新资料
我将插件调用重新实现为指令。确实有效。它会以SelectBoxIt选择框的形式启动下拉菜单,但在使用ng-options ...填充下拉菜单之前,它仍然会完成。
.directive('fancySelect', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var $targetSelects = $(element),
selectConfig = {
theme: "bootstrap",
downArrowIcon: "arrow",
showFirstOption: false
};
function onOpen(event){
$(this).data("selectBox-selectBoxIt").downArrow.addClass("drop-up");
log('onOpen');
}
function onClose(event){
$(this).data("selectBox-selectBoxIt").downArrow.removeClass("drop-up");
log('onClose');
}
$targetSelects.selectBoxIt(selectConfig);
$targetSelects.on({
"open" : onOpen,
"close" : onClose
});
$targetSelects.selectBoxIt('refresh');
}
};
});
最佳答案
如果您不使用Angular.js,则可以使用填充选项将选项添加到SelectBoxIt下拉列表中:http://gregfranko.com/jquery.selectBoxIt.js/#PopulateOptions
由于您使用的是Angular,如果在填充选择框后有某些事件可以听,那么您可以调用SelectBoxIt refresh()方法来更新下拉菜单,如下所示:
// Once your original select box is populated
$('select').selectBoxIt('refresh');