AnglarJS directive改ページ、続きは…

38596 ワード

简単にページを书きました.コメントがなくて、何もできませんでした.ただ考えを书きました.続きます.
<!DOCTYPE html>
<html data-ng-app="myPage">
<head>
    <title></title>
    <script src="../js/angular.min.js"></script>
</head>
<body data-ng-controller="myPageController">
<div page data-items-source="itemsSource" data-page-size="pageSize" data-current-page="currentPage"></div>
</body>
<script>
    var myPage = angular.module('myPage', []);
    myPage.controller('myPageController', function ($scope) {
        $scope.itemsSource = [
            {
                Id: 1,
                name: 'Jackey1'
            },
            {
                Id: 2,
                name: 'Jackey2'
            },
            {
                Id: 3,
                name: 'Jackey3'
            },
            {
                Id: 4,
                name: 'Jackey4'
            },
            {
                Id: 5,
                name: 'Jackey5'
            },
            {
                Id: 6,
                name: 'Jackey6'
            },
            {
                Id: 7,
                name: 'Jackey7'
            },
            {
                Id: 8,
                name: 'Jackey8'
            },
            {
                Id: 9,
                name: 'Jackey9'
            },
            {
                Id: 10,
                name: 'Jackey10'
            },
            {
                Id: 11,
                name: 'Jackey11'
            },
            {
                Id: 12,
                name: 'Jackey12'
            },
            {
                Id: 13,
                name: 'Jackey13'
            },
            {
                Id: 14,
                name: 'Jackey14'
            },
            {
                Id: 15,
                name: 'Jackey15'
            },
            {
                Id: 16,
                name: 'Jackey8'
            }
        ];
        $scope.pageSize = 5;
        $scope.currentPage = 1;
    });
    myPage.directive('page', function () {
        return {
            restrict: 'A',
            templateUrl: 'template/page.html',
            scope: {
                itemsSource: '=',
                pageSize: '=',
                currentPage: '='
            },
            controller: function ($scope) {
                $scope.getPageNum = function () {
                    var pageNum = 0, temp = 0;
                    temp = $scope.itemsSource.length % $scope.pageSize;
                    if (temp === 0) {
                        pageNum = Math.round($scope.itemsSource.length / $scope.pageSize);
                    } else {
                        pageNum = Math.round($scope.itemsSource.length / $scope.pageSize) + 1;
                    }
                    return pageNum;
                };
                $scope.getPageShowArray = function (currenPage, len) {
                    var result = [];
                    if (currenPage - 1 === 0) {
                        var resultLen = len > $scope.pageNum ? $scope.pageNum : len;
                        for (var i = 0; i < resultLen; i++) {
                            result.push(i + 1);
                        }
                    } else {
                        var resultLen = len > $scope.pageNum ? $scope.pageNum : len;
                        for (var i = 0; i < resultLen; i++) {
                            result.push(currenPage - 1 + i);
                        }
                    }
                    return result;
                };
                $scope.showPage = function (Id) {
                    $scope.currentPage = Id;
                    var start = (Id - 1) * $scope.pageSize;
                    var end = Id * $scope.pageSize;
                    $scope.showItems = $scope.itemsSource.slice(start, end);
                    console.log($scope.showItems);
                };
                $scope.prevClick=function () {
                    var Id = ($scope.currentPage - 1) == 0 ? 1 : $scope.currentPage - 1;
                    $scope.showPage(Id);
                };
                $scope.nextClick = function () {
                    var Id = $scope.currentPage + 1 > $scope.pageNum ? $scope.pageNum : $scope.currentPage + 1;
                    $scope.showPage(Id);
                };
            },
            link: function (scope, element, attr) {
                scope.pageNum = scope.getPageNum();
                scope.pageBoxArray = scope.getPageShowArray(scope.currentPage, 5);
            }
        };
    });

</script>
<style>
    .page {
        width: auto;
        height: 30px;
        overflow: hidden;
    }

    .pageBox {
        width: 20px;
        height: 20px;
        border: 1px solid gray;
        line-height: 20px;
        text-align: center;
        float: left;
        margin-left: 15px;
        cursor: pointer;
    }

    .pageBox:hover {
        background: yellow;;
    }

    .prevBtn {
        width: 50px;
        height: : 20 px;
        float: left;
        cursor: pointer;
        border: 1px solid gray;
        text-align: center;
        line-height: 20px;
    }

    .nextBtn {
        width: 50px;
        height: 20px;
        float: left;
        cursor: pointer;
        border: 1px solid gray;
        margin-left: 10px;
        text-align: center;
        line-height: 20px;
    }
</style>
</html>
templateUrl 
<div class="page">
<div class="prevBtn" data-ng-click="prevClick()">prev</div>
<div class="pageBox" data-ng-repeat="item in pageBoxArray" data-ng-click="showPage(item)">{{item}}</div>
<div class="nextBtn" data-ng-click="nextClick()">next</div>
    </div>
後期に実現したい機能は、直接pageのdirectiveデータソースと表示が必要な本数、directiveがインターフェースを提供して現在のページのデータを返してから、別の表示データのdireciveにデータをバインドすることです.