親ビューでは、このコードでjsonファイルを取得し、子ビューでng-repeatを使用してアクセスします。
$scope.services = Services.query();
factory("Services", function($resource) {
return $resource("/services/:serviceId", {
serviceId: "@_id"
}, {});
それまではすべてが問題ありません。
問題は私が子ビューを直接表示するか、ページを更新するかを指定します。私はまだng-repeatでビューにjsonファイルの内容を表示することができます。しかし、私は子供のコントローラでファイルを使用することはできません。私は子供の中でこのコードを試して問題を特定しようとしました
if($scope.services){ // in both cases it"s not null
var s="";
if($scope.selectedService)
s="NO refresh an NO direct access";
else
s="refresh or direct access";
console.log(s);
console.log("data : " + $scope.services);
console.log($scope.services.length);
console.log($scope.services)
}
そしてここに出力があります
たぶん、子コントローラは親コントローラの前に実行されるでしょうか?どうすればこの問題を解決できますか?
回答:
回答№1は0この場合の問題は、おそらく親が呼び出し $リソース それは非同期HTTPリクエストでJSONを取得するため遅延があります。
この遅延の間、子コントローラが実行されます。
親コントローラにconsole.logを追加することで確認できます。
console.log("Starting Services.query()");
$scope.services = Services.query();
次に、親コントローラが子コントローラの前に実行されることがわかります。
これに対する解決策は、子コントローラ内のロジックをそれに依存しないように変更することです $scope.services
コントローラが作成されたときに使用可能です。