1、bootstrap-select 依赖bootstrap.js ,又依赖jQuery,这些都可以用requirejs来处理。
2、一般bootstrap-select 都放在具体的模块上,而是动态加载的,所以想只在HTML上写class = selectpicker是不行的,因为HTML加载进来的时候,依赖的scope的变量和HTML还未绑定完成,不能立马 $('#ui-role').selectpicker();
3、那么能不能等HTML加载完了,触发的事件,再来 $('#ui-role').selectpicker(); ,比如 $scope.$watch('$viewContentLoaded', function() { }); ,结果是一样的,页面作用域的内容还没绑定到页面上, $('#ui-role').selectpicker(); 可以执行,但是下拉框没有内容。
4、最后只能自定义属性指令,当加载完时 $emit('ready') ,页面上注册该事件,收到通知再来 $('#ui-role').selectpicker(); ,结果是可行的。
5、属性指令代码:
1 app.directive('onReady', function ($timeout) { 2 return { 3 restrict: 'A', 4 link: function (scope, element, attr) { 5 if (scope.$last === true) { 6 $timeout(function () { 7 scope.$emit('ready'); 8 }); 9 } 10 } 11 } 12 });
6、页面部分代码,用于发出“完成信号”,我放在页面最后:
1 <div ng-repeat="x in [0]" on-ready=""></div>
7、Js注册事件:
1 $scope.$on('ready', function () { 2 $('#ui-role').selectpicker(); 3 });
2017.12.18 续 ==>
当然简单点,也可以推迟0.5秒 setTimeout(code,millisec) 再执行 $('#ui-role').selectpicker(); ,不过流畅度稍减,也可能0.5秒不够。