1

多くの同様の質問にもかかわらず、ng-show子スコープから親スコープで DOM 要素を非表示にする方法が見つかりませんでした。

ネストされたコントローラーが 2 つあります。親の 1 つ (に添付) では、youtube の埋め込みディレクティブを使用して、のビューを変更してもビデオを継続的に読み取ることができますng-view

<html ng-app="app" ng-controller="ParentCtrl">
  <body>
    <youtube-video id="player" ... ng-show="selectedVideo.showVideo"></youtube-video>
    <div ng-view></div>
  </body>
</html>

ngRoute で定義されたルートに初めて到達すると、親コントローラーのメソッドが呼び出され、両方のコントローラーでビデオを表示するか非表示にするかを決定できます。

$scope.selectedVideo.showVideo = true;

そして、ビデオは私が望むように表示または非表示にされます。

ただし、戻るボタンを使用すると、親コントローラーのメソッドは呼び出されませんが、それでも呼び出します

$scope.selectedVideo.showVideo = false;

しかし、ビデオはまだ表示されます...

その時点で、ページを完全に (そして手動で) 更新すると、最終的にビデオが非表示になります。

なぜこのようなことになるのか、よくわかりません...

私は基本的に、ビデオを表示するいくつかの ngRoute ビューとそうでないビューをいくつか用意したいと考えています。つまり、親コントローラーの ng-show を子コントローラーから true/false に設定したいのですが...

どうすればそれを達成できますか?

上記のオブジェクトとプリミティブの両方で使用しようとしまし$scope.$parentたが、何も変わりませんでした。

ng-show に使用される実際の値は更新されますが、ng-show が ngView の外にあるため更新されません...

4

1 に答える 1

2

親コントローラーでは、次を使用してすべてのルート変更をリッスンできます。

$scope.$on('$routeChangeSuccess', function(current){ 
    console.log(current) 
});

次に、現在のルートのプロパティを使用して、適切なスコープ変数を設定することでビデオ プレーヤーを管理できるはずです。

于 2015-05-04T22:01:38.377 に答える