我使用以下代码使用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');

09-20 05:30