javascript - angular新手求教怎么把controller里的功能分离出来?
高洛峰
高洛峰 2017-04-11 12:02:04
[JavaScript讨论组]

我在做几个简单的表格相关的页面,基本也就和示例文档里的那些表格数据绑定差不多,但是因为用到了分页,所以之前就在controller里写了几个分页相关的方法,大概下面这个意思:

var app = angular.module('myApp', []);

app.controller('tableController',function($scope,getHttpJson){
    //...一些获取数据的代码...
    $scope.pageConfig = {
        itemNum: data.TableData.length,
        numPerPage: 5
    }
    $scope.pagination($scope.pageConfig);
    $scope.pagination = function(pageSetting){//分页初始化
        var itemNum = pageSetting.itemNum;
        var numPerPage = pageSetting.numPerPage;
        
        $scope.pageNum = Math.ceil(itemNum/numPerPage);
        $scope.pageList= [];
        for(var i=1,len = $scope.pageNum;i<=len;i++){
            $scope.pageList.push(i);
        }
        $scope.curPage = 1;
        $scope.getPageItems();
    }
    $scope.getPageItems = function(){//...}//获取当前页内数据
    $scope.chanPageNum = function(){//...}//切换页码
}

然而分页功能肯定是几个页面要复用的,应该要单独封装出来吧。可我现在试了很久也不知道该用什么方法把它们从controller里分离出去,因为这几个方法里都用到了$scope。试过用directive,然后把需要的$scope里的值用scope:{value:'='}这样绑定,但是link的方法里scope.value就是undefined,是我用的不对吗?

第一次用angular,可能这个问题有点白痴,我不知道是不是我写jquery太久了,感觉看了很久的书和文章都搞不太懂angular的模块化该怎么理解Q-Q,现在感觉好混乱。factoryservicedirective都应该什么场景下使用Q-Q?(我的问题本质应该是因为没理解这个吧…)

能回答的话非常感谢Q-Q

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(3)
ringa_lee

把分页写在directive或者factory里面,把分页的一些初始化配置(每页分页的条数写成自定义html指令),然后获取数据的时候,把数据总条数,自定义的东西一起传过来,再用双向数据绑定,渲染到视图上。
`app

.directive("gPagination", [function () {
    return {
        template:'pagination.html',
        restrict: 'E',
        replace: true,
        link: function ($scope, elem, attrs) {

        }
    }
}])`


 pagination.html
<p>
    <pagination ng-model="pagination.pageIndex" total-items="pagination.totalItems" max-size="5"
                ng-change="pageChanged()" items-per-page="pagination.pageSize" previous-text="&lsaquo;"
                next-text="&rsaquo;" first-text="&laquo;" last-text="&raquo;" class="pagination" boundary-links="true"
                rotate="false"></pagination>
</p>',

在controler里先注入directive,就能在项目内使用分页啦
 $scope.pageChanged = function () {
            $scope.option.pageIndex = $scope.pagination.pageIndex;
            getList();//获取数据信息
        }
高洛峰

多用directive,你会发现写多了angular很多代码都在diective和service里面。

伊谢尔伦

封装一个服务里面,然后在controller依赖这个服务就可以了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号