2016-07-23 7 views
2

下記の問題についてはthis plunkを確認してください。ビューのコントローラーが2回ロードされるのはなぜですか?

plunkを実行すると、特定のタブがあることがわかります。最初のタブHomehomeの状態に属します。残りのタブは、categoryに属し、各タブはカテゴリIDによって識別されます。

私が現在Homeタブにいるときに、他のタブをクリックすると、CategoriesControllerが期待通りに1回だけ呼び出されます。しかし、そこから他のタブをクリックすると、CategoriesControllerが複数回呼び出されます(前のタブでは1回、新しく選択されたタブでは2回)。それをよりよく理解するために、プランナーを実行してブラウザコンソールを観察してください。

コントローラが以前のタブでも呼び出された理由はわかりません。どんな助けもありがとう。

答えて

0

コントローラを複数回呼び出す理由がわからない。私は、問題を把握しようとしているが、それまでは、次の操作を行うことができます

  1. これがために動作しますui-view="categories"要素に

ng-controller="CategoriesController"を追加controller: "CategoriesController"

  • 状態の設定からを削除します今はそのビュー - >コントローラだけが呼び出され、アクティブであるからです。

    編集:

    が問題を抱えてui-viewn数はあなたのタブのn数のためにレンダリングされているので、あなたは、各タブでui-view="categories"を持っています。

    スライドアニメーションを提供するために、実際に何が起こっているのですか、Angularマテリアルは、左右のタブをDOMでも利用できるようにしています。

    ホーム(最初のタブ)から別のタブをクリックしてもうまくいきます。しかし、他のタブ(最初のタブ以外)から行くときは、スライドの効果を実行する必要があるので、それぞれの左の&右のタブも同様に動作します。

    +0

    しかし、それは動作していないようです。私はそれを活性化するために2回タブをクリックする必要があります。 –

    +0

    なぜタブに状態を使用したいのですか?単純な指令を使用できないのはなぜですか? –

    0

    UはあなたのCategoriesController$stateChangeStart $でseletedTab値を変更しているwatcher.but同時にuがパラメータとしてseletedTabが必要ng-ifui-viewを使用しています。

    セイを現在uはタブ0であり、そしてタブ1に切り替えると物事は次のように起こる:すべての

    1. まず、ウル状態変化start.In $stateChangeStartウォッチャーは、selectedTabがに設定されています

    2. タブ0のui-viewはDOMから削除されます。

    3. タブ1のui-viewがDOMに追加されますが、現在$ stateParams.catIDはまだ0です。このように、それは$ stateParams.catID = 0でCategoriesControllerを開始し、同時に、それはこれが1である最初のタブには、以前のコントローラの

    4. ui-viewを起動さ0 seletedTabを設定しましたDOMから削除され、タブ0のui-viewがDOMに追加されます。

    5. ur $ stateが正常に変更されました。タブ0でui-viewは$ stateParams.catID = 1でCategoriesControllerをinitedし、これが次のコントローラ今のタブ0でui-viewが削除され

    6. OKための最初の呼び出しとui-viewであるseletedTabに1 を設定しますタブ1が再びDOMに追加され、最後に$ stateParams.catID = 1でCategoriesControllerを挿入しました。 これは、私はそれが明らかにした次のコントローラー

    希望する第二のinvokeです。

    関連する問題