【问题标题】:AngularJS Firebase database ng-repeat filtered data into ngtable with ngTableParamsAngularJS Firebase 数据库 ng-repeat 使用 ngTableParams 过滤数据到 ngtable
【发布时间】:2017-03-22 16:43:30
【问题描述】:

我根据另一个 Firebase 数据库过滤一个 Firebase 数据库,并将结果连接到一个 $scope 和 ng-repeat $scope 数组 projectslist 在一个带有 ng-repeat="obj in projectslist" 的 ngtable 中,效果很好! 但是,当我想将 ngTableParams 添加到我的表中时,它会中断并仅显示数组中的第一个对象。
这次我像这样重复:ng-repeat="obj in $data"
这是串联数组的控制台日志:

这是控制器:

app.controller('ProjectCtrl', ["$scope", "$filter", "ngTableParams", "firebase", "Auth", "DatabaseRef", "$firebaseArray", "$firebaseObject",
    function ($scope, $filter, ngTableParams, firebase, Auth, DatabaseRef, $firebaseArray, $firebaseObject) {

        var userId = firebase.auth().currentUser.uid;

        $scope.projectslist = [];

        var projectsRef = DatabaseRef.ref('/users/' + userId).orderByKey().once("value")
            .then(function onSuccess(snapshot) {
                snapshot.child("projects").forEach(function (childSnapshot) {
                    var userprojects = childSnapshot.val();

                    var projectquery = DatabaseRef.ref("projects").orderByKey().equalTo(userprojects);
                    var list = $firebaseArray(projectquery);
                    $scope.list = $firebaseArray(projectquery);
                    list.$loaded(function(){
                        $scope.projectslist = $scope.projectslist.concat(list);

                    });
                    var data =  $scope.list;
                    data.$loaded().then(function(data) {
                        $scope.tableParams = new ngTableParams({
                            page: 1, // show first page
                            count: 7, // count per page
                        }, {
                            dataset: data,
                            filterSwitch: true,
                            getData: function ($defer, params) {
                                var filteredData = params.filter() ? $filter('filter')(data, params.filter()) :  data;
                                var orderedData = params.sorting() ? $filter('orderBy')(filteredData, params.orderBy()) : data;

                                params.total(data.length);
                                // set total for recalc pagination
                                $defer.resolve(orderedData.slice((params.page() - 1) * params.count(), params.page() * params.count()));

                            }
                        });
                    });
                });


            });    
}]);

问题是:

如何在 ngTableParams 正常工作的情况下对表中的数据进行 ng-repeat、过滤、排序、分页?

【问题讨论】:

    标签: angularjs arrays firebase angularjs-ng-repeat firebase-realtime-database


    【解决方案1】:

    您需要先对数据进行排序,然后进行过滤,然后才能对数据应用分页。

    $scope.tableParams = new NgTableParams(
                    {
                        page : 1, // show first page
                        count : 5, // count per page
                    },
                    {
                        getData : function($defer, params) {
                            {
                                if (!$scope.projectslist|| !$scope.projectslist.length) { return; }
                                $scope.data = params.sorting() ? $filter('orderBy')($scope.projectslist, params.orderBy()) : $scope.projectslist;
                                $scope.data = params.filter() ? $filter('filter')($scope.data, params.filter()):$scope.data;
                                $scope.data = $scope.data.slice((params.page() - 1) * params.count(), params.page() * params.count());
                                $defer.resolve($scope.data);
                            }
                        }
                    });  
    

    然后你可以在下面定义的html中使用它

    <table ng-table="tableParams" class="table table-striped responsive"  show-filter="true" border="1" cellspacing="1" style="padding-left: 100px;padding-right: 100px;">
    					  <tbody ng-repeat="obj in $data">
    						<tr ng-form="rowForm">
    				
    							<td data-title="'Project Name'" filter="{'project_name':'text'}" sortable="'project_name'"
    								style="overflow: auto; -webkit-overflow: auto;"
    								><label>{{obj.project_name}}</label>
    							</td>
                              <!--<td>
    
      More rows </td>-->
    </table>

    【讨论】:

    猜你喜欢
    • 2016-06-04
    • 2015-08-21
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 2014-04-03
    • 2018-06-28
    相关资源
    最近更新 更多