学习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. jquery点击添加样式,再次点击移除样式

    $("#divSetting").on("click", function () { $(this).toggleClass("open") ...

  2. Tensorflow版本更改所产生的问题及解决方案

    1.module 'tensorflow' has no attribute 'mul' tf.mul已经在新版本中被移除,使用 tf.multiply 代替 解决方法 将tf.mul(input1, ...

  3. 【visio】跨职能流程图

    归属于 流程图类别 相比于普通流程图,突出了参与流程的组织.部门之间的联系,形式化地说,它突出的是参与流程的对象之间的联系. 它除了表达基本流程,同时也能展示每个每个流程的归属方,让每个对象明确知道自 ...

  4. AcWing 858. Prim算法求最小生成树 稀疏图

    //稀疏图 #include <cstring> #include <iostream> #include <algorithm> using namespace ...

  5. 关于java中MD5加密(可直接使用)

    本文转自:http://www.cnblogs.com/solove/archive/2011/10/18/2216715.html 上部分是转载的关于字符串的加密,后半部分则比较全,包括字符串.文件 ...

  6. springboot笔记-2-.核心的上下文以及配置扫描解析(上)

    前言 上一节中说明了springboot是如何做到自动发现配置的,那么本节看下spring如何创建上下文并解析这些配置,加载我们注册到容器管理中的类.上节已经成功的创建了SpringApplicati ...

  7. Yii2中事务的使用

    官方是这样的 // $connection其实是数据库连接$transaction = $connection->beginTransaction(); try { $connection-&g ...

  8. PHP基础学习笔记1

    一.基本语法 1.1 形式 PHP 脚本以 <?php 开始,以 ?> 结束: <?php //php代码 ?> 1.2 注释 单行注释 //这是单行注释 多行注释 /* 这是 ...

  9. 在linux里面ps -ef | grep tomcat 什么意思

    linux中的查看和tomcat有关系的进程的命令 例如 [root@localhost bin]# ps -eaf | grep tomcat root 5091 1 0 23:04 pts/0 0 ...

  10. vscode生成文件头注释(python)

    文件→首选项→用户代码片段→选python 在大括号内添加如下内容: "Print infomation": { "prefix": "prelog& ...