AngularJs渲染完毕后执行指定操作

最近用AngularJs做了一个Web的项目,AngularJs的设计真的很适合CRUD。真的建议很多内部的提高生产力的工具转而采用Web,以AngularJs为框架。
通常的Web程序,我们需要在页面加载完成的时候执行某些特定的操作,在没有AngularJs的时候一般采用的是监听onLoad event。但在使用AngularJs来渲染页面时,onLoad不能保证AngularJs已经完成了页面的渲染。最常见的情况就是用AngularJs来加载某个数据Table,我们得等这个Table加载完之后对Table上的数据进行操作,但因为这个Table是由AngularJs渲染的,所以得找到某个方法获得AngularJs渲染完毕后的事件。
AngularJs原生directive或Method没有提供这种功能,现在普遍的做法是通过写一个directive绑定到我们需要监听的元素上去获得该元素的渲染完毕事件,现在就以ng-repeat为例:

具体的方法有两种,一种是回调函数,一种的事件通知。为了简便,把两种方法写到一起了:

View


<ul>
  <li ng-repeat="item in items" on-finish-render="callMethod()"> dummy Text </li> </ul>

Directive


.directive('onFinishRender',['$timeout','$parse',function ($timeout,$parse) {
    return {
        restrict: 'A',link: function (scope,element,attr) {
            if (scope.$last === true) {
                $timeout(function () {
                    scope.$emit('ngRepeatFinished'); //事件通知
                        var fun = $scope.$eval(attrs.onFinishRender);
                        if(fun && typeof(fun)=='function'){  
                            fun();  //回调函数
                        }  
                });
            }
        }
    }
}])

事件处理


//捕获 emited event
$scope.$on('ngRepeatFinished',function(ngRepeatFinishedEvent) {

 });

相关文章

AngularJS 是一个JavaScript 框架。它可通过 注:建议把脚本放在 元素的底部。这会提高网页加载速度,因...
angluarjs中页面初始化的时候会出现语法{{}}在页面中问题,也即是页面闪烁问题。出现这个的原因是:由于...
AngularJS 通过被称为指令的新属性来扩展 HTML。AngularJS 指令AngularJS 指令是扩展的 HTML 属性,带有...
AngularJS 使用表达式把数据绑定到 HTML。AngularJS 表达式AngularJS 表达式写在双大括号内:{{ expres...
ng-repeat 指令可以完美的显示表格。在表格中显示数据 {{ x.Name }} {{ x.Country }} 使用 CSS 样式为了...
$http是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。读取 JSON 文件下是存储在web服务器上...