学习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. cannot be resolved to a type解决方法!!!

    小楼今天在做一个Java项目的时候遇到一个大家经常遇到的问题:XXX cannot be resolved to a type 看到一百多个errors时的时候,小楼也是被吓得赶紧去找度娘. 归纳一下 ...

  2. 二叉树的详细实现 (C++)

    二叉树的定义     以递归形式给出的:一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左子树和右子树的.互不相交的二叉树组成.二又树的特点是每个结点最多有两个子女, ...

  3. tensflow

    今天换了电脑,重新安装视频中软件,发现没记录很麻烦,还是记录以下步骤吧 打开终端输入指令:python,如图1所示,我的系统是ubuntu16.04.03,默认安装的python版本为2.7.12. ...

  4. 搭建 Kubernetes 高可用集群

    使用 3 台阿里云服务器(k8s-master0, k8s-master1, k8s-master2)作为 master 节点搭建高可用集群,负载均衡用的是阿里云 SLB ,需要注意的是由于阿里云负载 ...

  5. 利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试

    从一到二:利用mnist训练集生成的caffemodel对mnist测试集与自己手写的数字进行测试 通过从零到一的教程,我们已经得到了通过mnist训练集生成的caffemodel,主要包含下面四个文 ...

  6. vue音乐播放器

    利用vue写一个简单的音乐播放器,包括功能有歌曲搜索.歌曲播放.歌曲封面.歌曲评论.播放动画.mv播放六个功能. <template> <div class="wrap&q ...

  7. go基础_函数

    函数的基本写法 func add(a int, b int) int { return a + b } 如果2个参数的类型一样,可以简写为 func add(a, b int) int { retur ...

  8. 删除数据高级用法:delete,truncate

    1.语法: delete 允许使用条件(删除符合条件的数据) 允许使用limit,限制删除的记录数.limit N     常见的是,limit配合order by来使用:先将结果排序,再删除固定数量 ...

  9. 6_10 下落的树叶(UVa699)<二叉树的DFS>

    每年到了秋天树叶渐渐染上鲜艳的颜色,接着就会落到树下来.假如落叶发生在二叉树,那会形成多大的树叶堆呢?我们假设二叉树中的每个节点所落下的叶子的数目等于该节点所储存的值.我们也假设叶子都是垂直落到地面上 ...

  10. 什么是buffer?

    Buffer 类的实例类似于整数数组,但 Buffer 的大小是固定的.且在 V8 堆外分配物理内存. Buffer 的大小在被创建时确定,且无法调整. Buffer 类在 Node.js 中是一个全 ...