ホームページ ウェブフロントエンド jsチュートリアル Angularjsのコントローラー間相互通信機能の詳細説明

Angularjsのコントローラー間相互通信機能の詳細説明

Jun 13, 2018 pm 02:47 PM
angularjs コントローラ コミュニケーションの方法

今回はAngularjsのコントローラーの相互通信機能について詳しく解説します。Angularjsでコントローラー同士を通信させる際の注意点は何ですか?実際の事例を見てみましょう。

angularjs 開発プロジェクトでは、パラメーター転送やデータ転送など、コントローラー間の通信が比較的一般的です。コントローラー間の通信は特に重要です。一般的な方法は 2 つあり、1 つ目は angular サービス方法、2 つ目はイベント ブロードキャストに基づく方法、さらにスコープ継承に基づく方法です。まず最初の 2 つのメソッドについて説明しましょう:

1. Angular サービスに基づくメソッド:

Angular では、サービスはシングルトンであるため、サービス内でオブジェクトが生成され、オブジェクトは依存関係注入を使用できます。メソッドはすべてのコントローラーで共有されます。次の例を参照して、1 つのコントローラーでサービス オブジェクトの値を変更し、別のコントローラーで変更された値を取得します。

var app = angular.module('myApp', []);
app.factory('Myservice', function(){
 return {};
});
//定义服务
app.controller('Ctrltest1', function($scope, 'Myservice') {
 $scope.change = function() {
  Myservice.name = $scope.test; //在第一个控制器中为服务对象赋值
 };
});
app.controller('Ctrltst2', function($scope, 'Myservice') {
 $scope.add = function() {
  $scope.name = Myservice.name; //将第一个控制器中为服务对象赋的值传给第二个控制器
 };
});
ログイン後にコピー
<p ng-controller=&#39;Ctrltest1&#39;>
  <input type="text" ng-model="test" />
  <p ng-click="change()">click me</p>
</p>
<p ng-controller=&#39;Ctrltest2&#39;>
 <p ng-click="add()">my name {{name}}</p>
</p>
ログイン後にコピー

2. イベント ブロードキャストに基づいて

イベント ブロードキャストに基づいて、次を使用する必要があります。 3 つのメソッド $emit()$broadcaset()、および $emit() に移動します。 $emit()$broadcaset()$emit()这三个方法。

1. 向父作用域层次结构发出自定义事件:使用$emit()方法,scope.$emit(name,[args,...])

注:name是事件名,args 是0个或多个参数。

应用场景:用于子页面控制器向父页面的控制器传递参数。

2. 向子作用域层次结构广播自定义事件:

应用场景:用于父页面控制器向子页面的控制器传递参数或者同级控制器之间传递参数。

使用$broadcaset()方法,$scope.$broadcaset(name,[args,...])

注:name是事件名,args 是0个或多个参数.

3. 使用侦听器处理自定义事件

为了处理发出或广播的事件,可以使用$on()方法。$on()方法将使用下面的语法:

$scope.$on(name,listener)

注:name 是将要侦听的事件的名字,listener参数是一个函数,它将接受事件作为第一个参数,接受$emit()或者$broadcaset()方法传递的其他所有参数作为随后的参数。$on()方法主要用于监听$emit()$broadcaset()

1. カスタム イベントを親スコープ階層に送信します: $emit() メソッド、scope.$emit(name,[args,...]) を使用します。

注:

name はイベント名、args は 0 個以上のパラメーターです。

アプリケーションシナリオ:

子ページコントローラーから親ページコントローラーにパラメーターを渡すために使用されます。

2. カスタム イベントをサブスコープ階層にブロードキャストします:

アプリケーション シナリオ:

親ページ コントローラーが子ページ コントローラーにパラメーターを渡す、または兄弟コントローラー間でパラメーターを渡すために使用されます。 $broadcaset() メソッド、$scope.$broadcaset(name,[args,...]) を使用します

🎜注: 🎜name はイベントですname、args は 0 個以上のパラメータです。🎜🎜3. リスナーを使用してカスタム イベントを処理します🎜🎜 発行されたイベントまたはブロードキャスト イベントを処理するには、$on() メソッドを使用できます。 $on() メソッドは次の構文を使用します: 🎜🎜$scope.$on(name,listener)🎜🎜🎜注: 🎜name は、リスナー パラメータはイベントを最初のパラメータとして受け入れる関数であり、他のすべてのパラメータは $emit() または $broadcaset() によって渡されます。 > メソッドを後続のパラメータとして使用します。 $on() メソッドは主に、$emit() メソッドと $broadcaset() メソッドのイベントの変更を監視するために使用されます。これら 2 つのメソッド 変数が変更されると、$on() メソッドは変数の変更を取得します。 🎜🎜 次の例を参照してください。あるコントローラーで変数の値が変更されると、変更された値は別のコントローラーで認識され、変更された値に従って応答します。 🎜
app.controller('versiontaskCtrl', function WriteTestcaseCtrl($scope, $cookies, $rootScope, $modal, $stateParams, ui, searchVariable, currentuserversions,) {
 $scope.taskId = $cookies['edit_taskId'];
 $scope.versionid = parseInt($cookies['edit_versionId']);
 $scope.versionName = $cookies['edit_versionName'];
 $scope.version = $scope.versionid;
 getuserversions = function () {
  currentuserversions.get(function (res) {
   $scope.versions = res;
  });
 };
 reload = function () {
  getuserversions();
 };
 $scope.changeVersionid = function (v) {
  console.log(v);
  $scope.$broadcast('versionidChange', $scope.versionid); //向其他控制器广播$scope.versionid值的变化。
 };
 reload();
});
ログイン後にコピー
🎜 2 番目のコントローラーは、最初のコントローラーのブロードキャスト イベントを監視します。 🎜
app.controller('SchemeTaskEditableRowCtrl', function ($scope, $rootScope, $cookies, $filter, $http, $window, $stateParams, basetasksService, schemetasksService, UserService) {
 $scope.taskId = $cookies['edit_taskId'];
 $scope.versionid = $cookies['edit_versionId'];
 $scope.version = $scope.versionid;
 var userid = $rootScope.user.userid;
 $scope.schemetask = [];
 $scope.basetask = [];
 $scope.result = [];
 $scope.$on('versionidChange', function (event, versionid) {
  $scope.versionid = versionid; //监听到$scope.versionid值的变化。然后调用 $scope.schemeTask()和$scope.getUsers()这两个方法
  $scope.schemeTask();
  $scope.getUsers();
 });
 $scope.schemeTask = function () {
  $scope.tasks = [];
  $scope.schemetask = [];
  schemetasksService.get({version: $scope.versionid}, function (res) {
   $scope.schemetask_collection = res.results;
   //console.log($scope.schemetask_collection);
   $scope.schemetask_displayed = [].concat($scope.schemetask_collection);
   var i = 1;
   angular.forEach($scope.schemetask_collection, function (item) {
    item['director'] = "app.writetestitem" + "({taskid:" + item.id + "})";
    item['number'] = i;
    i++;
    $scope.schemetask.push(item);
   });
   $scope.tasks = $scope.schemetask;
  });
 };
 $scope.getUsers = function () {
  UserService.get(function (res) {
   $scope.users = res.results;
   $scope.usersDisplayed = [].concat($scope.users);
   $scope.itemArray = [];
   $scope.userArray = [];
   $scope.names = [];
   angular.forEach($scope.users, function (item) {
    $scope.itemArray.push(item);
    $scope.userArray.push(item.name + item.number);
    var itemname = {'name': item.name, 'number': item.number};
    $scope.names.push(itemname);
   });
   $scope.selected = $scope.users;
  });
 };
});
ログイン後にコピー
🎜 この記事のケースを読んだ後は、この方法を習得したと思います。さらに興味深い情報については、PHP 中国語 Web サイトの他の関連記事に注目してください。 ! 🎜🎜推奨読書: 🎜🎜🎜HTML文字列をHTMLタグに変換し、🎜🎜🎜🎜🎜jsのnew()で🎜🎜🎜を指すコンストラクターの戻り値を変更する方法

以上がAngularjsのコントローラー間相互通信機能の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Windows 11 で Xbox One コントローラーを適切に調整する方法 Windows 11 で Xbox One コントローラーを適切に調整する方法 Sep 21, 2023 pm 09:09 PM

Windows がゲーム プラットフォームとして選ばれるようになったため、そのゲーム指向の機能を特定することがさらに重要になっています。その 1 つは、Windows 11 で Xbox One コントローラーを調整する機能です。組み込みの手動キャリブレーションを使用すると、ドリフト、ランダムな動き、またはパフォーマンスの問題を取り除き、X、Y、Z 軸を効果的に調整できます。利用可能なオプションが機能しない場合は、いつでもサードパーティの Xbox One コントローラー調整ツールを使用できます。確認してみましょう! Windows 11 で Xbox コントローラーを調整するにはどうすればよいですか?続行する前に、コントローラーをコンピューターに接続し、Xbox One コントローラーのドライバーを更新していることを確認してください。この作業中に、利用可能なファームウェアのアップデートもインストールします。 1. 風を利用する

Laravelをゼロから学ぶ:コントローラーメソッド呼び出しの詳細説明 Laravelをゼロから学ぶ:コントローラーメソッド呼び出しの詳細説明 Mar 10, 2024 pm 05:03 PM

Laravelをゼロから学ぶ:コントローラーメソッド呼び出しの詳細解説 Laravelの開発において、コントローラーは非常に重要な概念です。コントローラーはモデルとビューの間のブリッジとして機能し、ルートからのリクエストを処理し、対応するデータを表示のためにビューに返す責任を負います。コントローラー内のメソッドはルートから呼び出すことができます。この記事では、コントローラー内のメソッドの記述方法と呼び出し方法を詳しく紹介し、具体的なコード例を示します。まず、コントローラーを作成する必要があります。 Artisan コマンド ライン ツールを使用して、

Laravelコントローラーとは何ですか Laravelコントローラーとは何ですか Jan 14, 2023 am 11:16 AM

laravel では、コントローラー (Controller) は特定の機能を実装するために使用されるクラスであり、コントローラーは関連するリクエスト処理ロジックを別のクラスに結合できます。一部のメソッドは、特定の機能を実装するためにコントローラーに保存されます。コントローラーはルーティングを通じて呼び出され、コールバック関数は使用されなくなり、コントローラーは「app/Http/Controllers」ディレクトリに保存されます。

PHPでCodeIgniter4フレームワークを使用するにはどうすればよいですか? PHPでCodeIgniter4フレームワークを使用するにはどうすればよいですか? May 31, 2023 pm 02:51 PM

PHP は非常に人気のあるプログラミング言語であり、CodeIgniter4 は一般的に使用される PHP フレームワークです。 Web アプリケーションを開発する場合、フレームワークを使用すると、開発プロセスのスピードアップ、コードの品質の向上、メンテナンス コストの削減が可能になり、非常に役立ちます。この記事ではCodeIgniter4フレームワークの使い方を紹介します。 CodeIgniter4 フレームワークのインストール CodeIgniter4 フレームワークは、公式 Web サイト (https://codeigniter.com/) からダウンロードできます。下

Laravel スタディガイド: コントローラーメソッド呼び出しのベストプラクティス Laravel スタディガイド: コントローラーメソッド呼び出しのベストプラクティス Mar 11, 2024 am 08:27 AM

Laravel 学習ガイドでは、コントローラー メソッドの呼び出しは非常に重要なトピックです。コントローラーはルーティングとモデルの間のブリッジとして機能し、アプリケーションで重要な役割を果たします。この記事では、コントローラー メソッド呼び出しのベスト プラクティスを紹介し、読者の理解を助ける具体的なコード例を示します。まず、コントローラー メソッドの基本構造を理解しましょう。 Laravel では、コントローラー クラスは通常 app/Http/Controllers ディレクトリに保存され、各コントローラー クラスには複数のものが含まれます。

入門から習得まで、2022 年の最新 5 つの angularjs チュートリアル 入門から習得まで、2022 年の最新 5 つの angularjs チュートリアル Jun 15, 2017 pm 05:50 PM

Javascript は、コードの構成、コードのプログラミング パラダイム、およびオブジェクト指向理論の点で非常にユニークな言語です。しかし、JavaScript が 20 年間主流であったとはいえ、jQuery、Angularjs、さらには React などの人気のあるフレームワークを理解したい場合は、「Black Horse Cloud Classroom JavaScript Advanced Framework」を見てください。デザインビデオチュートリアル」。

プロセス間の 5 つの通信方法とは何ですか? プロセス間の 5 つの通信方法とは何ですか? Dec 07, 2020 pm 01:51 PM

プロセス間の通信方式は5つあり、1. 速度が遅く容量が限られ、親プロセスと子プロセスのみ通信できるパイプ、2. どのプロセス間でも通信できるが遅い、FIFO、3. ランダムな通信が実現できるメッセージキューメッセージのクエリ。容量はシステムによって制限されます。 4. セマフォは複雑なメッセージを送信できず、同期にのみ使用できます。 5. 共有メモリ領域とは、2 つ以上のプロセスが特定の記憶領域を共有することを意味します。

PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供します PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供します Jun 27, 2023 pm 07:37 PM

今日の情報化時代において、ウェブサイトは人々が情報を入手し、コミュニケーションを図るための重要なツールとなっています。レスポンシブな Web サイトはさまざまなデバイスに適応し、ユーザーに高品質のエクスペリエンスを提供できます。これは、現代の Web サイト開発のホットスポットとなっています。この記事では、PHP と AngularJS を使用して応答性の高い Web サイトを構築し、高品質のユーザー エクスペリエンスを提供する方法を紹介します。 PHP の概要 PHP は、Web 開発に最適なオープンソースのサーバー側プログラミング言語です。 PHP には、学びやすさ、クロスプラットフォーム、豊富なツール ライブラリ、開発効率など、多くの利点があります。

See all articles