自定义 directive pagination

学习angular过程中,对directive 不是很了解,很有必要自己写一个,以便知道它的各方面的处理方式.

directive 中 scope 与 controller 交互,有三种定义策略 "=" ,"@" , "&"

另外一个就是 cope的 双向绑定.是要消耗时间的,并不能立即在controller 中使用

使用:
<mypagination start="start" length="length" recordstotal="recordsTotal" searchgrid="search()"></mypagination>

模版:

<div>
    <ul class="pagination pull-left">
        <li class="footable-page disabled"><div>显示 {{start+1}} 到 {{start+length>recordstotal?recordstotal:start+length}} 项,共 {{recordstotal}} 项</div></li>
    </ul>
    <ul class="pagination pull-right">
        <li ng-class="{disabled:!first}"><a ng-click="setpagination(‘first‘)">«</a></li>
        <li ng-class="{disabled:!prev}"><a ng-click="setpagination(‘prev‘)">‹</a></li>
        <li class="disabled"><a>{{ pageIndex }}</a></li>
        <li ng-class="{disabled:!next}"><a ng-click="setpagination(‘next‘)">›</a></li>
        <li ng-class="{disabled:!last}"><a ng-click="setpagination(‘last‘)">»</a></li>
    </ul>
</div>

定义:

app.directive(‘mypagination‘, [‘$rootScope‘, function ($rootScope) {
    return {
        restrict: ‘E‘,
        templateUrl: ‘/Scripts/App/tpls/mgitem/pagination.tpl.html‘,
        replace: true,
        transclude: true,
        scope: {
            start: ‘=‘,
            length: ‘=‘,
            recordstotal: ‘=‘,
            searchgrid: ‘&‘
        },
        controller: function ($scope, $element, $rootScope) {
            var hassearch = false;
            $scope.setpagination = function (pageflag) {
                var newstart = 0;
                switch (pageflag) {
                    case "first":
                        newstart = 0;
                        break;
                    case "prev":
                        newstart = ($scope.pageIndex - 2) * $scope.length;
                        break;
                    case "next":
                        newstart = ($scope.pageIndex) * $scope.length;
                        break;
                    case "last":
                        newstart = ($scope.endIndex - 1) * $scope.length;
                        break;
                }

                console.log(‘setpagination start=‘ + newstart);
                $scope.start = newstart;
                hassearch = true;
            }

            $scope.pagination = function () {
                $scope.pageIndex = parseInt($scope.start / $scope.length) + 1;
                $scope.endIndex = parseInt($scope.recordstotal / $scope.length) + 1;
                $scope.first = $scope.pageIndex <= 1 ? false : true;
                $scope.last = $scope.pageIndex >= $scope.endIndex ? false : true;
                $scope.prev = $scope.pageIndex > 1 ? true : false;
                $scope.next = $scope.pageIndex < $scope.endIndex ? true : false;

                console.log(‘pagination recordstotal=‘ + $scope.recordstotal);
            }

            $scope.$watch(‘recordstotal‘, function () {
                console.log(‘watch recordstotal‘);
                $scope.pagination();
            });

            $scope.$watch(‘start‘, function () {
                console.log(‘watch start‘);
                if (hassearch)
                {
                    $scope.searchgrid();
                    hassearch = false;
                }
                $scope.pagination();
            });
        },
        compile: function(tElem, tAttrs){
            //console.log(name + ‘: compile‘);
            return {
                pre: function(scope, iElem, iAttrs){
                    //console.log(scope.recordstotal + ‘: pre compile‘);
                },
                post: function(scope, iElem, iAttrs){
                    //console.log(scope.recordstotal + ‘: post compile‘);
                }
            }
        },
        link: function (scope, element, attris) {
            scope.pageIndex = 1;
            scope.first = false;
            scope.prev = false;
            scope.next = false;
            scope.last = false;

        }
    };
}])
时间: 2024-10-11 11:11:55

自定义 directive pagination的相关文章

AngularJs中,如何在父元素中调用子元素为自定义Directive中定义的函数?

最近一段时间准备使用AngularJs中的自定义Directive重构一下代码. 在这里说明一下,把自定义控件封装成Directive并不一定是要复用,而是要让代码结构更加清晰.就好像你将一个长方法拆分成多个独立的小方法,也未必要复用它们一样.职责独立等一票好处,会让后期维护更加轻松. 在重构的过程中,我遇到了这样一个问题,先上图: 图一: 这就是我要重构的界面,由于之前时间紧,将这三个Filter和两个button都写在了一个页面中.当时我已经预感到,如果将这里面的状态都写到一个scope上,

AngularJs(Part 11)--自定义Directive

先对自定义Directive有一个大体的映像 myModule.directive('myDirective',function(injectables){ var directiveDefinitionObject={ restrict:string, priority:number, template:string, templateUrl:string, replace:bool, transclude:bool, scope:bool or object, controller:func

AngularJS自定义Directive

什么时候需要自定义Directive? 1. 使你的Html更具语义化,不需要深入研究代码和逻辑即可知道页面的大致逻辑. 2. 抽象一个自定义组件,在其他地方进行重用. 看一下如下2个代码片段: 示例1: 1 <body> 2 <div> 3 <p>This is your class name.</p> 4 <div> 5 <p>Your teacher:</p> 6 <p>Mr. Wang</p>

angularjs前端分页自定义指令pagination

在table的后面:<div class="panel-footer"> <nav class="pull-right"> <pagination num-pages="pages" curr-page="page" on-select-page="selectPage(page)"></pagination> </nav> </div>

AngularJS自定义Directive初体验

通常我们这样定义个module并随之定义一个controller. var app = angular.module('myApp', []); app.controller('CustomersController', ['$scope', function($scope){ var counter = 0; $scope.customer = { name:'', street:'' }; $scope.customers = [ { name:'', street:'' }, ... ];

AngularJS自定义Directive中link和controller的区别

在AngularJS中,自定义Directive过程中,有时用link和controller都能实现相同的功能.那么,两者有什么区别呢? 使用link函数的Directive 页面大致是: <button id="addItem">Add Item</button><without-Controller datasource="customers" add="addCustomer"></without-

关于angular 自定义directive

关于angular 自定义directive的小结 首先我们创建一个名为"expander"的自定义directive指令: angular.module("myApp",[]).directive("expander",function(){ return{ //directive的一些属性(键值对形式)如下: /* restrict:'EA', replace:true, transclude:true, scope:{...}, templ

AngularJS自定义Directive与controller的交互

有时候,自定义的Directive中需要调用controller中的方法,即Directive与controller有一定的耦合度. 比如有如下的一个controller: app.controller('MyCtrl',function($scope){ $scope.load = function(){ console.log('loading more...') } }); 现在自定义一个Direcitve,需要调用MyCtrl这个controller中的load方法. app.direc

详解angularJs中自定义directive的数据交互

就我对directive的粗浅理解,它一般用于独立Dom元素的封装,应用场合为控件重用和逻辑模块分离.后者我暂时没接触,但数据交互部分却是一样的.所以举几个前者的例子,以备以后忘记. directive本身的作用域$scope可以选择是否封闭,不封闭则和其controller共用一个作用域$scope.例子如下: <body ng-app="myApp" ng-controller="myCtrl"> <test-directive><