ホームページ  >  記事  >  ウェブフロントエンド  >  Angular のコントローラー、サービス、命令間の関係についての簡単な説明

Angular のコントローラー、サービス、命令間の関係についての簡単な説明

青灯夜游
青灯夜游転載
2021-05-13 10:59:252544ブラウズ

この記事では、angular コントローラー、サービス、命令の関係について紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

Angular のコントローラー、サービス、命令間の関係についての簡単な説明

[関連する推奨事項: "angular チュートリアル "]

全体として、これら 3 つのコンポーネント間の関係は次のとおりです。

  • サービスは、リモート サーバーからのデータの取得と保存を担当します。
  • サービス上に構築されたコントローラーは、Angular のスコープ階層にデータと機能を提供します。
  • サービスおよびコントローラー上に構築されたディレクティブは、ドキュメント オブジェクト モデル (DOM) 要素と直接対話します。

コントローラーが依存関係インジェクターに登録されていないため、コントローラーとサービスはコントローラーを依存関係としてリストできません。

<div ng-controller="MyController"></div>
var m = angular.module(&#39;myModule&#39;);
 
m.factory(&#39;myService&#39;, function() {
    return { answer: 42 };
});
 
m.controller(&#39;MyController&#39;, function(myService) {
    //使用myService
});
 
m.controller(&#39;MyController2&#39;, function(MyController) {
    //错误:使用控制器注册
});
 
m.factory(&#39;myService2&#39;, function(MyController) {
    //错误:使用控制器注册
});

各 ng コントローラーは 1 回インスタンス化され、サービスは 1 回だけインスタンス化されます。つまり、サービスはシングルトンです。

コントローラーは $scope などのローカル オブジェクトを依存関係として一覧表示できますが、サービスはローカル オブジェクトを依存関係として一覧表示できません。

m.factory(&#39;myService&#39;, function($scope) {
    //错误:$scope未使用依赖注入器进行注册
});

これが、Angular で JavaScript データと関数をサービスではなくコントローラーが HTML に公開する理由です。コントローラーは $scope にアクセスできます。

ディレクティブにはコントローラーを関連付けることができ、サービスを依存関係としてリストすることができます。ただし、コントローラーとサービスはディレクティブを依存関係としてリストすることはできません。

angular.module(&#39;stockDogApp&#39;)
  .directive(&#39;stockTable&#39;, function() {
  	return {
  		template: &#39;Views/templates/stock-table.html&#39;,
  		restrict: &#39;E&#39;,
  		scope: {
  			watchlist: &#39;=&#39;
  		},
  		controller: function ($scope) {
  			//...
  		}
  	}
  });

ディレクティブには、ディレクティブのスコープが常に別のディレクティブのスコープの子孫である必要があることを保証するために使用される require 属性を持つこともできます。

angular.module(&#39;stockDogApp&#39;)
  .directive(&#39;stockRow&#39;, function($timeout, QuoteService) {
  	return {
  		restrict: &#39;A&#39;,
  		require: &#39;^stockTable&#39; //stockTable指令,^表示在父作用域中寻找
  		scope: {
  			stock: &#39;=&#39;,
  			isLast: &#39;=&#39;
  		},
  		link: function ($scope, $element, $attrs, stockTableCtrl) {
  			//..
  		}	
  	}
  });

ディレクティブ オプション require では、stockRow ディレクティブのスコープがstockTable ディレクティブのスコープの子孫である必要があり、インスタンス化されたstockTable ディレクティブのコントローラー (リンク関数の 4 番目のパラメーター) にアクセスできる必要があります。 。 2 つのディレクティブを一緒に使用する必要がある場合、require ディレクティブ オプションがそのジョブに適したツールです。

注: 「AngularJS による高度なプログラミング」を参照し、単なるメモとして扱ってください。

プログラミング関連の知識について詳しくは、プログラミング入門をご覧ください。 !

以上がAngular のコントローラー、サービス、命令間の関係についての簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。