2014-10-28 82 views
0

說,我們正在編寫分頁過濾的數據:在AngularJS,怎麼能一個控制器得到正在從另一個控制器

<div ng-controller="panelCtrl"> 
    <table> 
    <tr ng-repeat="item in items | filter:query.name">{{item}}</tr> 
    </table> 

    <ul ng-controller="paginationCtrl"> 
    <li ng-repeat="n in range()"> 
    </ul> 
</div> 

在我range功能,我想獲得的物品數量和itemsPerpage在它除以爲了獲得頁碼。我想知道如何在過濾後獲得項目數量。

在此先感謝

回答

0

您可以將過濾的列表保存在變量中。現在

<div ng-controller="panelCtrl"> 
    <table> 
    <tr ng-repeat="item in filtered = (items | filter:query.name")>{{item}}</tr> 
    </table> 

    <ul ng-controller="paginationCtrl"> 
    <li ng-repeat="n in range()"> 
    </ul> 
</div> 

你可以做{{filtered.length}}得到長度或將其作爲輸入range(filtered.length)

過濾也可以是一個範圍內的可讀性,在這種情況下應在paginationCtrl中可用。

0

您可以使用服務在控制器之間進行通信。請參閱下面的解決您的問題之一。

var app = angular.module('app', []); 
 
app.factory('dataService', function($filter) { 
 

 
    var data = 
 

 
    { 
 
     items: ["Apple", "Banna", "Potato", "Pear"], 
 
     itemsFiltered: [] 
 
    } 
 

 
    return { 
 
    data: data 
 

 

 

 
    }; 
 

 

 
}); 
 

 
app.controller('homeCtrl', function($scope, filterFilter, dataService) { 
 

 

 

 
    $scope.data = dataService.data; 
 

 
    $scope.$watch('filtered.length', function(value) { 
 

 
    dataService.data.itemsFiltered = $scope.filtered; 
 

 

 
    }) 
 

 
}); 
 

 
app.controller('paginationCtrl', function($scope, dataService) { 
 

 

 
    $scope.data = dataService.data; 
 

 

 
})
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="app"> 
 
    <div ng-controller="homeCtrl"> 
 

 

 
    <input type="text" ng-model="query.name" /> 
 
    <table> 
 
     <tr ng-repeat="item in filtered = (data.items | filter:query.name)"> 
 
     <td>{{item}}</td> 
 
     </tr> 
 
    </table> 
 

 

 
    <hr/> 
 
    </div> 
 

 
    <div ng-controller="paginationCtrl"> 
 
    <p>Pagination Controller</p> 
 
    <pre> Filtered Array Length: {{data.itemsFiltered.length}}</pre> 
 

 

 
    </div> 
 
</div>

相關問題