/ / Parentの前に実行された子コントローラ - javascript、angularjs、angularjs-scope、angularjs-controller

親コントローラの前に実行された子コントローラ - javascript、angularjs、angularjs-scope、angularjs-controller

親ビューでは、このコードで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 コントローラが作成されたときに使用可能です。