0

したがって、私のコントローラーの構造が原因である可能性があります。ここにコントローラーとコントローラーが表示されますが、重要な部分は次のとおりです。

親コントローラー

//Load version
$scope.person = People.people.get({ id: $routeParams.id}, function(person) {
     var associations = {
         events: person.events || [],
         people: person.people || [],
         places: person.places || []
     };
     $scope.$broadcast('setAssociations', associations);
});
//Event version
$scope.$on('getAssociations', function(e, args) {
  var associations = {
    events: $scope.person.events || [],
    people: $scope.person.people || [],
    places: $scope.person.places || []
  };
  $scope.$broadcast('setAssociations', associations);
});

子コントローラー

$scope.$on('setAssociations', function(event, args) {
    $scope.parentEvents = args.events;
});

$scope.$emit('getAssociations', {});

アイデアはevents、親のpersonオブジェクトから子コントローラーまでを取得する必要があるということです。問題は、親から育てる各方法がsetAssociations1 つのコンテキストでしか機能しないことです。

loadページがアプリ内からナビゲートされた場合 (ハッシュ、ナビゲーション)、バージョンは機能します。ただし、リロードまたは外部からの移動 (全ロード) の場合、子イベントは発生しません。これはおそらく、リスナーがまだ登録されていないためです。

このeventバージョンは、ページが更新された場合、またはアプリの外部からナビゲートされた場合 (ページが完全に読み込まれる原因となるもの) に機能します。に移動すると、$scopeは空ですが、このメソッドは失敗します。

そのため、アプリがコントローラーを読み込む順序は、「ディープリンク」または更新時と、内部ナビゲーションを実行するときで異なります。親子関係を持つ角度コントローラーから一貫した負荷動作を取得するにはどうすればよいですか?

4

1 に答える 1

5

この問題を別の観点から見ると、子スコープは親スコープからプロトタイプとして継承されるため、これは、親スコープで定義したすべてのプロパティが子スコープですぐにアクセスできることを意味します...後で親スコープにプロパティを追加したとしても、子スコープが作成された後。つまり、子に必要な情報を取得するためにイベントを使用する必要がない場合があります。

問題が単に子スコープが親スコープからの情報を必要とすることである場合は、そのデータを新しい親 $scope プロパティに割り当て、子ビューにアクセスさせます。定義されると、子ビューに表示されます。の代わりにvar associations、 を試してください$scope.associations

これは、ng-click を使用して一部のデータを親スコープに追加する不自然なフィドルです。これは、子ビューに表示されます

これで問題は解決しますか?

于 2012-12-12T16:06:16.520 に答える