私の提案は、コントローラーの継承とサービスを使用して、子コントローラーが常にショップにアクセスできるようにすることです。ここにデモがあります:
http://beta.plnkr.co/edit/DtjwLMi3jHCdzTheEJDNn?p=preview
コード:
angular.module('myApp', ['myApp.services']);
function MainCtrl($scope, ShopService) {
$scope.shop = ShopService.getShop();
}
function ChildCtrl($scope) {
}
angular.module('myApp.services', []).
factory('ShopService', function ($rootScope) {
var shop = {
storename: 'your store'
};
var service = {
getShop: function() {
return shop;
}
}
return service;
});
子コントローラの関係を設定する HTML:
<html ng-app="myApp" >
<head>
<meta charset="utf-8">
<title>AngularJS Plunker</title>
<link rel="stylesheet" href="style.css">
<script>document.write("<base href=\"" + document.location + "\" />");</script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
The store is {{shop.storename}}
<div ng-controller="ChildCtrl">
The store name is: {{shop.storename}}
</div>
</body>
</html>
shop
親スコープがそれを取得したため、子が を使用できることがわかります。サービスをセットアップして、テスト可能にすることができます/など。継承に加えて、ShopService
各コントローラーに を簡単に挿入して呼び出しを行うこともできますが、コントローラーが多数ある場合は面倒になる可能性があります。
スコープの継承に関する詳細情報:
親コントローラの変数を継承できますか?
http://docs.angularjs.org/guide/dev_guide.mvc.understanding_controller