スコープにいくつかのものを設定するマスターコントローラーのようなものがあるので、内部コントローラーはそれを使用できます。
そのセットアップ作業は非同期なので、promise でラップしましたが、既に解決されていない限り、コールバックを実行していません (ブレークポイントを設定しようとしましたが、十分に待機すると、実際にthen
コールバックが実行されます)。
これは、ネットワーク要求ではなくタイムアウトで私の問題を再現するフィドルです: http://jsfiddle.net/LMv8v/1/
HTML
<div ng-app>
<div ng-controller="configController">
<div ng-controller="testC">
{{test}}
{{foo}}
</div>
</div>
</div>
Javascript
function configController ($scope, $q) {
var deferred = $q.defer();
$scope.config = deferred.promise;
setTimeout(function() {
console.log('timeout');
deferred.resolve({
'foo' : 'baz'
});
}, 1000);
};
function testC($scope) {
$scope.test = 'I am working, uh?';
$scope.config.then(function(config) {
console.log('then...');
$scope.$apply(function() {
$scope.foo = config.foo;
});
});
};
「timeout」は表示されますが、「then...」メッセージは表示されません。
(これがサービスに適していることはわかっていますが、ネストされたスコープを持つコードがすでにたくさんあり、リファクタリングを開始する前にそれを機能させたいと考えています)