私はAngularJSの工場とサービスの周りを頭で囲み、つづきを止めようとしています。ここで私が解決しようとしている問題に似た基本的な例があります。今、HTMLAngular JSの子コントローラの中のデータを集計する
<div ng-controller="productGridController">
<div ng-repeat="category in categories" ng-controller="productCategoryController">
<input type="text" ng-model="category.name">
<div ng-repeat="product in products">
<input type="text" ng-model="product.name">
</div>
<a class="btn btn-small" ng-click="addProduct()">Add Product</a>
</div>
<a class="btn" ng-click="addCategory()">Add Category</a>
</div>
のは、私は現在、ルートコントローラproductGridController
の内部でインスタンス化されるすべての製品の合計数を取得し、私はproductGridController
の内部出力をすることができます変数に格納したいとしましょう
$scope.totalProducts
productCategoryController
にはそれぞれ独自のスコープがありますので、どのようにグローバルカウンタとそのような合計を行うのかよく分かりません。私はサービスや工場がこれを何かすることができると思うが、それをどう実装するかは分からない。
私はこのようなproductGridController
にルートスコープの変数を入れてみました:
app.controller("productGridController", function($scope, $http, $rootScope, $timeout) {
$scope.totalProducts = 0;
$scope.categories = [];
$scope.addCategory = function() {
$scope.categories.push({name:''});
}
});
そして何かがproductCategoryController
app.controller("productCategoryController", function($scope, $http, $rootScope, $timeout) {
$scope.products = [];
$scope.addProduct = function() {
$scope.products.push({name:''});
}
$scope.$watch('products', function() {
$scope.totalProducts = $scope.products.length;
}, true);
});
に変更したときにのみ、追加のカテゴリが存在していたときにこの作品を見、複数のカテゴリがある場合は、最新のカテゴリのみを考慮します。
また、実際のアプリケーションでは、データベースからデータを取得しているので、これもリアルタイムで機能する必要があるので、カウンタ機能を呼び出して現在のステータスを反映させることができます現在いくつの製品が存在しているかということです。
Angular JSでこれを行う最も簡単な方法は何ですか?
* Angular JSでこれを行う最も簡単な方法は何ですか?*あなたは 'ng-repeat'で各項目のコントローラをインスタンス化することで人生を複雑にしていると思います。一般的に、コントローラはあまりにも多くをやってはいけません。単一のビューに必要なビジネスロジックのみを含める必要があります。詳細については、[AngularJS Developer Guide - コントローラを正しく使用する](https://docs.angularjs.org/guide/controller#using-controllers-correctly)を参照してください。 – georgeawg