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
});
});
}
};
});