0

変数を変更する2つのリンク(アンカー)があるテンプレート(ルーターによって定義されていない)があります

<a ng-href="#/service/service1"
   ng-click="activeService='minecraft'">

そして、2つの画像があります-それらのクラスは、ng-clickによって設定された変数に依存します

ng-class="activeService != 'none' ? { true: 'service-maximize-animate', false: 'service-minimize-animate'}[activeService=='service1'] : ''"

これは完全に機能します。しかし、ブラウザーの [戻る] ボタンを押すか、URL アドレスを直接変更すると、ルートの変更、ng-view更新が行われますが、(ルーターによって設定されていないグローバル テンプレート内の) 画像は更新されませんng-view((テンプレート)内にはありません)。

そして、ここで問題に直面します - を使用する必要がありますが、スコープはテンプレート ( ) のみであるため、ルーターでcontrollerは使用できません。controllerng-view

も使用しようとしましng-controllerたが、ルートが変更されたときに呼び出されません。

それを解決する方法はありますか?また、読みやすくする方法があるかどうか知りたいのですがng-view、今では恐ろしいです:)

ありがとう、ミハル・ホイグル

編集: jsfiddle: http://jsfiddle.net/5rzGU/9/

4

2 に答える 2

0

Angular の Observer システムを使用して解決しました。ルートが変更された後に呼び出されたコントローラーで、イベントをブロードキャストしました

$rootScope.$broadcast('event');

そして、ルーターのものとは異なる $scope を持つコントローラーでは、リッスンしますevent

 $scope.$on('event', function() {
       //code
 });

誰にも役立つことを願っています:)

于 2013-06-02T13:53:39.363 に答える
0

ここでは、jsfiddle/plunker が非常に役立ちます。

私の理解では、2 つのコントローラーは独立しています。ルーターのみを扱うため、URLを前後に移動すると、URLのみng-viewが変更されます。ng-viewは で何が起こっているのother controllerかわかりませんng-view's controller。ここで説明されているように、 から にメッセージを送信する必要があります: ng-view controllerAngularJS :コントローラー間で変数を渡すにはどうすればよいですか?other controller

または、2 番目のコントローラーをディレクティブに変換することを検討できます。

ng-viewの読みやすさの向上について。それをより小さなモジュール (可能であればディレクティブ) に分割することを検討してください。

于 2013-06-01T19:55:51.960 に答える