コンテンツへスキップ
AngularJS でコントローラー間でデータを共有する方法

AngularJS でコントローラー間でデータを共有する方法

私の AngularJS クラスでは、「AngularJS のコントローラ間でデータを共有するにはどうすればよいですか?」という質問をよく受けます。インターネット上では、多くの解決策が提案されています。

2min read

私の AngularJS クラスでは、「AngularJS のコントローラ間でデータを共有するにはどうすればよいですか?」という質問をよく受けます。インターネット上では、多くの解決策が提案されています。

ただし、私は Shared Data Service メソッドを使用してデータを共有することを好み、この投稿ではそれについて説明します。

まず、コントローラー間で Product オブジェクトを共有するとします。ここでは、以下のスニペットに示すように、SharedDataServiceという名前のAngularJSサービスを作成しました。

myApp.service('SharedDataService', function () {
     var Product = {
        name: '',
        price: ''
    };
    return Product;
});

次に、SharedDataServiceを使用して2つの異なるコントローラーを作成しましょう。コントローラーでは、前の手順で作成したサービスを使用しています。コントローラーは、以下のように作成できます。

var myApp = angular.module("myApp", ['CalService']);
 
myApp.controller("DataController1", ['$scope', 'SharedDataService',
    function ($scope, SharedDataService) {
       $scope.Product = SharedDataService;
    }]);
myApp.controller("DataController2", ['$scope', 'SharedDataService',
    function ($scope, SharedDataService) {
    $scope.Product = SharedDataService;
}]);

ビューでは、以下のリストに示すように、コントローラーを簡単に使用できます。

<div ng-controller="DataController1">
            <h2>In Controller 1</h2>
            <input type="text" ng-model="Product.name" /> <br/>
            <input type="text" ng-model="Product.price" />
            <h3>Product {{Product.name}} costs {{Product.price}} </h3>
        </div>
        <hr/>
        <div ng-controller="DataController2">
            <h2>In Controller 2</h2>
            <h3>Product {{Product.name}} costs {{Product.price}} </h3>
        </div>

これで、コントローラー間でデータを共有できます。ご覧のとおり、製品の名前と価格は DataController1 で設定されており、DataController2 でデータをフェッチしています。

データ共有に使用するより良いオプションはありますか?または、上記のアプローチでは解決できない可能性のある複雑なシナリオがあるかもしれません。もしそうなら、教えてください!以下のコメント欄で教えてください。

デモを予約