学习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+}} 到 {{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 = ;
switch (pageflag) {
case "first":
newstart = ;
break;
case "prev":
newstart = ($scope.pageIndex - ) * $scope.length;
break;
case "next":
newstart = ($scope.pageIndex) * $scope.length;
break;
case "last":
newstart = ($scope.endIndex - ) * $scope.length;
break;
} console.log('setpagination start=' + newstart);
$scope.start = newstart;
hassearch = true;
} $scope.pagination = function () {
$scope.pageIndex = parseInt($scope.start / $scope.length) + ;
$scope.endIndex = parseInt($scope.recordstotal / $scope.length) + ;
$scope.first = $scope.pageIndex <= ? false : true;
$scope.last = $scope.pageIndex >= $scope.endIndex ? false : true;
$scope.prev = $scope.pageIndex > ? 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 = ;
scope.first = false;
scope.prev = false;
scope.next = false;
scope.last = false; }
};
}])

自定义 directive pagination的更多相关文章

  1. 理解AngularJS生命周期:利用ng-repeat动态解析自定义directive

    ng-repeat是AngularJS中一个非常重要和有意思的directive,常见的用法之一是将某种自定义directive和ng-repeat一起使用,循环地来渲染开发者所需要的组件.比如现在有 ...

  2. 关于angular 自定义directive

    关于angular 自定义directive的小结 首先我们创建一个名为"expander"的自定义directive指令: angular.module("myApp& ...

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

    最近一段时间准备使用AngularJs中的自定义Directive重构一下代码. 在这里说明一下,把自定义控件封装成Directive并不一定是要复用,而是要让代码结构更加清晰.就好像你将一个长方法拆 ...

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

    在AngularJS中,自定义Directive过程中,有时用link和controller都能实现相同的功能.那么,两者有什么区别呢? 使用link函数的Directive 页面大致是: <b ...

  5. AngularJS自定义Directive不一定返回对象

    AngularJS中,当需要自定义Directive时,通常返回一个对象,就像如下的写法: angular.module('modulename') .directive('myDirective', ...

  6. AngularJS自定义Directive初体验

    通常我们这样定义个module并随之定义一个controller. var app = angular.module('myApp', []); app.controller('CustomersCo ...

  7. AngularJS自定义Directive

    (编辑完这篇之后,发现本篇内容应该属于AngularJS的进阶,内容有点多,有几个例子偷懒直接用了官方的Demo稍加了一些注释,敬请见谅). 前面一篇介绍了各种常用的AngularJS内建的Direc ...

  8. AngularJs(Part 11)--自定义Directive

    先对自定义Directive有一个大体的映像 myModule.directive('myDirective',function(injectables){ var directiveDefiniti ...

  9. 自定义Directive使用ngModel

    我们知道ngModel是AngularJS中默认的一个Directive,用于数据的双向绑定.通常是这样使用的: <input type="text" ng-model=&q ...

随机推荐

  1. IntelliJ IDEA 2017.3尚硅谷-----自动导包

  2. 最小树形图模板 UVA11183

    题意:给定n个节点m条边的有向带权图,求以0为根节点的最小树形图权值大小 用这个代码的时候要注意,这里的数据是从0开始的,边也是从0开始算, 所以在打主代码的时候,如果是从1开始,那么算法里面的从0开 ...

  3. 046_使用Scanner获得键盘输入 047_控制语句介绍 048_控制语句_if单选择结构 049_ifelse双选择结构 050_ifelseifelse多选择结构

    046_使用Scanner获得键盘输入 package test_package;import java.util.Scanner;/** * 测试获得键盘输入 * @author * */publi ...

  4. dbGet net trace instant pin

    proc rn { net_name } {puts " "puts "Net name : $net_name : "set name_rule [dbget ...

  5. C语言进行csv文件数据的读取

    C语言进行csv文件数据的读取: #include <stdio.h> #include <string.h> #include <malloc.h> #inclu ...

  6. tarjan-无向图(求割点)

    一.基本概念 1.割点:无向连通图中,如果删除某点后,图变成不连通,则称改点为割点. 2.桥:无向连通图中,如果去掉某条边后,整张无向图会分成两部分(即整张图不连通),这样的一条边成为桥. 3.点双连 ...

  7. Vim常用按键大全

    Vim完全可以用键盘进行操作.本文将常用的按键归纳总结. 第一部分:一般模式可用的按钮,如光标移动.复制粘贴.查找替换等 移动光标的方法 h, j, k, l 光标向左,下,上,右移动 Ctrl + ...

  8. 一张linux光盘查看是哪个版本号的方法

    在此查看版本号,方法如下:打开光盘,查找rpm包中的release,就是版本号.

  9. Spring Boot Json 之 Jackjson Fastjson

    Json 是目前互联网应用使用最为广泛的信息交换格式之一.Spring Boot 内置了 Jackson .Json 在应用中主要体现在以下功能: 序列化 反序列化 字段格式化 验证自动化 目前长用的 ...

  10. Java面向对象编程 -6.2

    数组的引用传递 通过数组的基本定义可以发现,在数组使用的过程中依然需要使用new进行内存空间的开辟,同理,那么也一定存在有内存的关系匹配问题. 但是数组本身毕竟属于引用数据类型,那么既然是引用数据类型 ...