検索

ホームページ  >  に質問  >  本文

angular.js - angular路由的控制器

路由时两个页面能公用一个控制器吗,比如

javascript    .state('a', {
        ...
        controller : 'aaaController'
    })
    .state('b', {
        ...
        controller : 'aaaController'
    })

如果行的话,控制器是独立的作用域还是公用的,比如说我在控制器里声明了个变量i,在a页面中改变了i的值,当我路由到b页面时,i的值会跟着变吗

PHP中文网PHP中文网2743日前788

全員に返信(3)返信します

  • 伊谢尔伦

    伊谢尔伦2017-05-15 16:52:44

    私も最近 angularjs を学んでいます。投稿者が言及した問題については、簡単なデモンストレーションを作成できます。

    次の HTML 構造、異なるビュー、同じコントローラーがあります

    リーリー

    コントローラーコードの一部:

    リーリー

    まず表示ボタンをクリックすると、出力結果は次のようになります:


    次に、「3 に変更」ボタンをクリックし、もう一度「表示」ボタンをクリックすると、結果は次のようになります:


    この実験から、同じコントローラーではありますが、スコープは実際にはまったく関係のない 2 つのスコープであることがわかります。

    スコープ構造もツリー状になっており、上記の HTML 構造には 2 つのスコープがあります。
    別の明らかな例を見てみましょう:
    リーリー

    コンソールを見てください


    結果は 2 回出力され、メソッドが 2 回実行されたことを示します。スコープが共有されている場合、重複して実行されることはありません。

    要約: コントローラーで変数 i を宣言し、ページ a で i の値を変更しても、ページ b にルーティングしても、i の値は変更されません

    お役に立てれば幸いです!

    返事
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-15 16:52:44

    このように使用するのは奇妙です、このように使用できるかどうかわかりません

    個人的には、通常の使用法は次のとおりだと思います:
    1 ページ、1 コントローラー
    コントローラー間で変数とメソッドを共有する必要がある場合は、作成したサービスを挿入するだけで、変数とメソッドを別のコントローラーに保存するサービスを angular で構築できます。

    公式ドキュメントには、サービスがコードを共有するために使用されることも明確に記載されています:

    サービス
    Angular サービスは、依存関係注入 (DI) を使用して相互に接続される置換可能なオブジェクトです。サービスを使用して、アプリ全体でコードを整理および共有できます。
    https://docs.angularjs.org/guide/services

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-05-15 16:52:44

    ルートを切り替えた後、コントローラーのライフサイクルは終了し、現在の $scope とサブスコープは無効になります。
    複数のコントローラー間でデータを共有する必要がある場合は、サービスを使用できます。

    返事
    0
  • キャンセル返事