ng-repeat
を使用して生成された角材料タブのリストがあります。<md-tab-content>タグの下にui-viewを使用してください
<md-tabs>
<md-tab label="Home" ui-sref="home">
<md-tab-body>
<div ui-view="home"></div>
</md-tab-body>
</md-tab>
<md-tab ng-repeat="cat in categories" label="{{cat.title}}" ui-sref="category({categoryName:cat.title, catID:cat.catID})">
<md-tab-body>
<h3>
{{cat.title}}
</h3>
<div ui-view="categories"></div>
</md-tab-body>
</md-tab>
</md-tabs>
私は、config
機能の各ビューに対して別々のコントローラを用意しました。
あなたがコードを実行すると、あなたは大丈夫ですHomeController
が一度呼び出されるHome
タブ、をクリックの上にこれを遵守します。しかし、他のタブをクリックすると、Tab1
と言うと、CategoriesController
が各タブごとに1回、7回呼び出されます。これは、私がテキストを印刷した開発者モードのコンソールで見ることができます。
私は<md-tab-body></md-tab-body>
の下にある<div ui-view></div>
の結果としてこのことが発生することを理解します。すべてのタブのコントローラーを呼び出します。これは、Tab1
の本文を表示したいときに、コントローラーから計算を7回行い、実際には各タブの本文をTab1
の内容で埋めることになりますが、隠されます。
私はこれが起こりたくありません。タブをクリックすると、コントローラの1つのインスタンスだけが呼び出され、そのタブの内容だけを入力する必要があります。
これを達成する方法はありますか?私は回避策を使用してjsFiddle here編集した
編集は以下の回答で示唆されました。しかし、まだCategoriesController
が2回呼び出されています。これにより、不要な計算が行われます。それを避ける良い方法はありますか?
コントローラーの呼び出しを防ぐために、_willBeDestroyed
プロパティを使用することを考えました。しかし、このプロパティはコントローラの呼び出しの前に私の手にはありません。
ご協力いただければ幸いです。ここで
「
」をタブ内に使用する特別な理由はありますか?正直なところ、私はそれに 'ui-router 'を使う理由は見当たりません。 – varit05各タブのデータの新しいコントローラをインスタンス化したいので、あるタブがアクティブなときに他のタブのデータを気にする必要はありません。この状況で私はui-routerを使いたいという大きな問題があります。私はちょうどここで問題を分解した。 –
ここで質問が見つかりました:http://stackoverflow.com/questions/27221222/separate-controller-per-tab-in-angular-material-w-ui-router?rq=1 その質問と私の違い質問には、ng-repeatを使用してが生成されていますが、それ以外の場合は個別のタブが –