ホームページ >ウェブフロントエンド >jsチュートリアル >AngularJS コントローラーはネストせずにどのように通信できるのでしょうか?

AngularJS コントローラーはネストせずにどのように通信できるのでしょうか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-08 10:13:11292ブラウズ

How Can AngularJS Controllers Communicate Without Nesting?

Angular コントローラー間の通信

AngularJS では、コントローラー間の通信を容易にすることが多くの場合必要になります。ただし、コントローラーがネストされていない場合、あるコントローラーから別のコントローラー内で変数にアクセスする場合、問題が発生します。

継承せずに変数を渡す

最初のコントローラー (Ctrl1) を変数として渡す$scope を使用して 2 番目のコントローラー (Ctrl2) に引数を指定すると、Ctrl1 は未定義のエラーのため実行できません。同様に、 Ctrl2.prototype = new Ctrl1(); を使用して Ctrl1 から Ctrl2 にプロパティを継承します。

解決策: サービスの利用

ネストせずにコントローラー間で変数を共有するには、サービスを作成し、それを関連するすべてのコントローラーに注入するのが効果的な解決策です。サービスは、機能を共有するために複数のコントローラーまたはディレクティブに挿入できる Angular コンポーネントです。

サービスの例:

angular.module('myApp').service('sharedProperties', function() {
  var property = 'First';

  return {
    getProperty: function() {
      return property;
    },
    setProperty: function(value) {
      property = value;
    }
  };
});

コントローラーでの使用:

function Ctrl1($scope, sharedProperties) {
  sharedProperties.setProperty('New First');
}

function Ctrl2($scope, sharedProperties) {
  $scope.prop2 = 'Second';
  $scope.both = sharedProperties.getProperty() + $scope.prop2;
}

sharedProperties を注入することにより

共有値へのバインド

共有値へのアクセスに加えて、共有データをバインドすることもできます。コントローラーのスコープ内のそれらに。バインドされた参照を保持するには、プリミティブ型ではなくオブジェクトのプロパティにバインドすることをお勧めします。

var property = { Property1: 'First' };

// Binded to a static copy in Ctrl1
$scope.prop11 = property.Property1;

// Binded to the shared value in Ctrl2
$scope.prop12 = sharedProperties.getProperty().Property1;

以上がAngularJS コントローラーはネストせずにどのように通信できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。