1

複数のビューを持つ複雑なページを作成するために ui-select を使用しています。ユーザーがタブ (または私の場合はドロップダウン) を選択すると、各ビューが ajax を介して読み込まれることを知らない人のために。ビューには従来、独自のコントローラーと HTML テンプレートがあります。ビューは、表示されている親ページのスコープを継承しますが、独自の子スコープを持ちます。

私の場合、一部のビューにはコントローラーがまったくありません。それらは非常に単純なので、html ページしかありません。問題は、親ページのスコープの構成オブジェクトでブール値を切り替えて、親ページのいくつかのコントロール フィールドをオフにできるようにしたいということです。すべてが既に存在し、複数のページがこれらのビューを使用しています。単にそれらを展開して、親の何かを切り替えたいだけです。

これには 3 つの方法があります。私は自分のui-routerでresolveメソッドを使用して、ビューがロードされたときに必要なフィールドを明示的に切り替えることができましたが、各ページの各ui-routerでこれを明示的に行う必要があります。クールなコードの再利用はありません。

現在コントローラーがない場合、ui-routerにコントローラーをロードさせることができ、コントローラーはこれを実行できます。ただし、これは、ビューを使用するすべての場所でほとんど不要なコントローラーを手動で追加することを意味し、コードの再利用のようには感じません。

または、ng-init を使用して、読み込み時に必要な値をビューに明示的に設定することもできます。私はまだコントローラーを持っていないので、これが最もクリーンで簡単だと感じます。

ただし、ng-init は眉をひそめられており、おそらくエイリアシングにのみ使用する必要があります。ng-init を使用するよりもクリーンなアプローチはありますか? コントローラーのないビューを持つのは本当に悪いことですか (より正確には、親コントローラーはまだありますが、新しいビューが開いたときに再ロードされません)。

4

2 に答える 2

3

ルートにコントローラーを指定しないという事実は、何も変更しません。ビューには独自のスコープがあるため、ルート コントローラーまたは独自のスコープを持たないディレクティブ (ngInit など) を使用して操作できます。

ngInit に関するよく知られた発言の目的

ngInit の唯一の適切な使用法は、以下のデモに見られるように、ngRepeat の特別なプロパティをエイリアシングすることです。この場合以外に、スコープの値を初期化するには、ngInit ではなくコントローラーを使用する必要があります。

「htmlプログラミング」からあなたを遠ざけることです。また、懸念事項の分離は Angular の長所ではないため、あまり意味がありません。html 属性からコードを評価するという Angular の習慣と、それがコア ディレクティブによってどのように使用されるかによって、それをさらに無視するように促されます。

于 2015-04-21T22:14:53.687 に答える