Heim >Web-Frontend >js-Tutorial >Eine kurze Diskussion über die Beziehung zwischen Controllern, Diensten und Anweisungen in Angular

Eine kurze Diskussion über die Beziehung zwischen Controllern, Diensten und Anweisungen in Angular

青灯夜游
青灯夜游nach vorne
2021-05-13 10:59:252636Durchsuche

Dieser Artikel stellt Ihnen die Beziehung zwischen eckigenControllern, Diensten und Anweisungen vor. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.

Eine kurze Diskussion über die Beziehung zwischen Controllern, Diensten und Anweisungen in Angular

【Verwandte Empfehlung: „angular Tutorial“】

Insgesamt ist die Beziehung zwischen diesen drei Komponenten wie folgt:

  • Der Dienst ist für das Abrufen und Speichern von Daten vom Remote-Server verantwortlich.
  • Auf Diensten basierende Controller stellen Daten und Funktionen für die Bereichshierarchie von Angular bereit.
  • Auf Diensten und Controllern basierende Anweisungen interagieren direkt mit DOM-Elementen (Document Object Model).

Da der Controller nicht beim Abhängigkeitsinjektor registriert ist, können der Controller und der Dienst den Controller nicht als Abhängigkeit auflisten.

<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) {
    //错误:使用控制器注册
});

Jeder NG-Controller wird einmal instanziiert, und der Dienst wird nur einmal instanziiert, das heißt, der Dienst ist ein Singleton.

Controller können lokale Objekte als Abhängigkeiten auflisten, z. B. $scope, aber Dienste können lokale Objekte nicht als Abhängigkeiten auflisten.

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

Aus diesem Grund ist es in Angular der Controller, der JavaScript-Daten und -Funktionen für HTML verfügbar macht, und nicht der Dienst: Der Controller hat Zugriff auf $scope.

Anweisungen können einen zugeordneten Controller haben und Dienste können als Abhängigkeiten aufgelistet werden. Aber Controller und Dienste können Anweisungen nicht als Abhängigkeiten auflisten.

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) {
  			//...
  		}
  	}
  });

Die Direktive kann auch ein require-Attribut haben, das verwendet wird, um sicherzustellen, dass der Geltungsbereich der Direktive immer ein Nachkomme des Geltungsbereichs einer anderen Direktive sein muss.

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) {
  			//..
  		}	
  	}
  });

Die Direktivenoption require erfordert, dass der Gültigkeitsbereich der stockRow-Direktive ein Nachkomme des Gültigkeitsbereichs der stockTable-Direktive sein muss und auf den Controller der instanziierten stockTable-Direktive zugreifen kann, der der vierte Parameter der Link-Funktion ist. Wenn die beiden Direktiven zusammen verwendet werden müssen, ist die Option „Require“-Direktive das richtige Werkzeug für diese Aufgabe.

Hinweis: Bitte beachten Sie „Erweiterte Programmierung mit AngularJS“ nur zur Erinnerung.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Einführung in die Programmierung! !

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über die Beziehung zwischen Controllern, Diensten und Anweisungen in Angular. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen