Javascript 推迟执行指令,直到ng选项完成

Javascript 推迟执行指令,直到ng选项完成,javascript,jquery,angularjs,jquery-chosen,Javascript,Jquery,Angularjs,Jquery Chosen,我正在使用以下标记在角度模板中创建一个选择元素: <select name="noOfPeople" ng-model="noOfPeople" ng-options="value for value in [] | range:12"> <option value="">No of people*</option> </select> 这是非常好的工作方式,现在在我的应用程序中的所有元素上都初始化了select。但是,这似乎不适用于使用

我正在使用以下标记在角度模板中创建一个选择元素:

<select name="noOfPeople" ng-model="noOfPeople" ng-options="value for value in [] | range:12">
    <option value="">No of people*</option>
</select>
这是非常好的工作方式,现在在我的应用程序中的所有
元素上都初始化了select。但是,这似乎不适用于使用
ng options
,因为所选的创建的div不包括
ng options
生成的任何选项。如果我查看Chrome开发者工具中原始的
元素,尽管我可以看到选项正在生成

我的理论是,在Angular有机会运行
ng options
并在DOM中创建
元素之前,Selected正在
元素上初始化


是否有一种方法可以延迟所选对象的初始化,直到Angular完成其处理并添加我想要的所有
元素?

您可以在不延迟的情况下注入并使用$timeout将操作置于浏览器事件队列的末尾(在渲染引擎之后):


请注意,这种情况是假设ngOptions的数据在初始化时可用,而不是异步检索。

我认为指令上的
priority
属性可以帮助您实现这一点。如果可能,我建议您使用Selected与Angular的集成。可能是一个候选者。实际上,我刚刚意识到使用
priority
无法解决根本问题,即必须等到选项源对象可用后才能初始化所选选项。我想你应该先试试@NikosParaskevopoulos的建议
directive('select', function() {
    return {
        restrict: 'E',
        link: function(scope, elm, attrs) {
            $(elm).chosen({disable_search: true});
        }
    }
})
app.directive('select', function($timeout) {
  return {
    restrict: 'E',
    link: function(scope, elm, attrs) {
      $timeout(function() {
        $(elm).chosen({
          disable_search: true
        });
      });
    }
  };
});