1

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機能の各ビューに対して別々のコントローラを用意しました。

Refer this link for the code

あなたがコードを実行すると、あなたは大丈夫です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プロパティを使用することを考えました。しかし、このプロパティはコントローラの呼び出しの前に私の手にはありません。

ご協力いただければ幸いです。ここで

+0

」をタブ内に使用する特別な理由はありますか?正直なところ、私はそれに 'ui-router 'を使う理由は見当たりません。 – varit05

+0

各タブのデータの新しいコントローラをインスタンス化したいので、あるタブがアクティブなときに他のタブのデータを気にする必要はありません。この状況で私はui-routerを使いたいという大きな問題があります。私はちょうどここで問題を分解した。 –

+0

ここで質問が見つかりました:http://stackoverflow.com/questions/27221222/separate-controller-per-tab-in-angular-material-w-ui-router?rq=1 その質問と私の違い質問には、ng-repeatを使用してが生成されていますが、それ以外の場合は個別のタブが –

答えて

1

のソリューションです - JsFiddle

変更点は次のとおりです。今、2つだけの最大呼び出さ

  • <md-tabs md-selected="selectedTab">

  • <div ui-view="categories" ng-if="selectedTab===cat.catID">

categoriesController

enter image description here

編集:

$stateParams$scope.selectedTabに対してチェックすることができ、不要な計算を避けるためにあなたが見ることができるようにのみ選択されたタブ(タブ2)の体が満たされた回数が、重要な部分ですコントローラー内で - Fiddle

+0

の世話をすることがあります。これはかなり良い回避策です。しかし、コントローラを一度しか呼び出さないようにしたい。 2回の呼び出しは不要な計算につながります。 –

+0

@SohanShirodkar不要な計算を避けるために、 '$ state.Params'を' $ scope.selectedTab'に対してチェックすることができます。編集を参照してください。 –

+0

はい、これは完璧な修正です。どうもありがとうございます !!! –

関連する問題