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

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

青灯夜游
リリース: 2021-05-13 10:59:25
転載
2637 人が閲覧しました

この記事では、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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート