私のAngularアプリでは、以下に示すようなコントローラーの親子関係があります。私の親コントローラは ngResource を使用してリソースをロードし、ビューでいくつかのレンダリングを行っています。子コントローラーで親スコープのリソースを使用したいのですが、ngResource 呼び出しが非同期であるため、スコープの ImageUrls 値はまだ定義されていません。子コントローラーにウォッチャーを設定するのが良いと思いましたが、うまくいきませんでした。
これを回避する方法を知っている人はいますか?ありがとう!
template.html
<div ng-controller="ParentController">
<div ng-controller="ChildController">
<div ng-repeat='img in myResource.ImageUrls'>
<div ng-show="doShowImg(img)">
</div>
</div>
</div>
</div>
script.js
function ParentController($scope, $routeParams, MyResource) {
$scope.myResource = MyResource.get({recipeId:$routeParams.recipeId}, function() {
$scope.imageUrls = $scope.myResource.ImageUrls;
});
}
function ChildController($scope) {
$scope.$watch('imageUrls', function(imageUrls) {
$scope.doShowImg = function(img) {
if($scope.imageUrls.length = 5) {
...
}
}
}
}
スコープ内の値が定義されていないため、javascript エラーが発生していますが、アプリはまだ機能していることに言及する価値があります。子コントローラーの関数が呼び出され、リソースが読み込まれ、リピーターが実行され、リスト内の画像に対して関数が再度呼び出されるように見えます。