親コントローラーまたはサービスのいずれかを使用できます。以下の最初の例では、親コントローラーを使用して項目とフィルター値を定義し、それを 2 つの子コントローラーと共有します。2 番目の例は、両方のコントローラーに挿入され、親コントローラーを必要としないサービスの使用を示しています。
親コントローラーの例: 両方に対して 1 つの親コントローラーを用意し、そのコントローラーでデータとフィルター値を定義します。これにより、各子コントローラーがフィルターを簡単に処理および操作できるようになります。
デモ: http://plnkr.co/edit/yrtsX5SQsRiNSho6o9x8?p=preview
HTML:
<body ng-controller="MainCtrl">
Hello {{name}}!
<div ng-controller="Filters">
<span ng-click="applyFilter()">Apply Filter</span>
</div>
<div ng-controller="Results">
<div ng-repeat="item in items | filter:filterFunc ">
{{item}}
</div>
</div>
</body>
コントローラー:
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
$scope.items = [1,2,3,4,5,6,7];
$scope.filterVal = 0;
});
app.controller('Filters', function($scope) {
$scope.applyFilter = function() {
$scope.$parent.filterVal = 5;
$scope.$apply();
}
});
app.controller('Results', function($scope) {
$scope.filterFunc= function(item) {
console.log(item);
if (item>$scope.filterVal)
return item;
}
});
サービスの例。 フィルター値とアイテムを含むサービスを使用した更新された例を次に示します。 http://plnkr.co/edit/wZFKBMRv0SeEsXNqARe2?p=preview
app.controller('Filters', function($scope, Utils) {
$scope.applyFilter = function() {
Utils.setFilter(4);
}
});
app.controller('Results', function($scope, Utils) {
$scope.items = Utils.getItems();
$scope.filterFunc= function(item) {
console.log(item);
if (item>Utils.getFilter())
return item;
}
});
angular.module('ServicesUtils', []).
factory('Utils', [ function () {
var items = [1,2,3,4,5,6,7];
var filter = 0;
var service = {
getFilter:function() {
return filter;
},
getItems:function() {
return items;
},
setFilter:function(n) {
filter = n;
}
};
return service;
}]);