20.实现AngularJS渲染完毕后执行脚本

20.实现AngularJS渲染完毕后执行脚本

目前要实现这样一个功能:使用bootstrap-select和AngularJS实现动态下拉表单。

AngularJS用于实现下拉菜单的内容渲染,内容通过AJAX获得,代码如下:

<select class="selectpicker" data-ng-model="queryForm.type">
    <option value="{{ type }}" data-ng-repeat="type in types">{{ type }}</option>
</select>
<script>
    $http({
        url: '/types',
        method: 'GET',
    }).success(function(response){
        $scope.types = response;
    });
</script>

bootstrap-select用做下拉表单样式渲染,select标签内容改动后,需要显示调用refresh指令进行重新渲染呢,例如

$('.selectpicker).selectpicker('refresh');

现在问题来了,如何实现在AngularJS渲染完DOM之后调用bootstrap-select进行select表单的重新渲染呢?

百度了一下,发现绝大部分人都是使用通过自定义AngularJS指令+link函数实现。果断不能接受!杀鸡岂用牛刀?

仔细想了一下,发现我们可以通过setTimeout很优雅地实现这个功能。JavaScript代码如下:

$http({
    url: '/types',
    method: 'GET',
}).success(function(response){
    $scope.types = response;
    $timeout(function(){
        $('.selectpicker').selectpicker('refresh');             
    },0);
});

主要原理就是利用了setTimeout函数所处的队列只会在调用栈清空后才会被执行。

也就是说,当setTimeout执行时,AngularJS的DOM渲染已经被执行完毕,并且调用栈已经清空了。此时bootstrap-select获得的DOM节点一定是最新的。

大家都采用的做法不一定都是最优,特别像一些杀鸡焉用牛刀的实现,遇到他们时,你就该好好想想了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ng-model 指令ng-model 指令 绑定 HTML 元素 到应用程序数据。ng-model 指令也可以:...
    壬万er阅读 898评论 0 2
  • AngularJS AngularJS概述 介绍 简称:ng Angular是一个MVC框架 其他前端框架: Vu...
    我爱开发阅读 2,349评论 0 8
  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,918评论 2 17
  • 一、介绍 AngularJS是一款由Google公司开发维护的前端MVC框架,其克服了HTML在构建应用上的诸多不...
    福尔摩鸡阅读 810评论 0 2
  • 柠柠小宝贝: 虽说我一直很不屑以这样俗气的形式祝别人生日快乐 但似乎也并没有更直接的办法来表达我对你的爱´ε` 我...
    wwarkey阅读 259评论 0 0