Ich gehe durch eine Reihe von Dokumentation, um Dienstleistungen und Fabriken zu verstehen. Kam über diesen Arbeitscode.Dienstleistungen in angularJS ein kleines Beispiel.
var app = angular.module('plunker', []);
app.value('cnt', 7);
app.service('foo', function(cnt) {
this.cnt = ++cnt;
this.inc = function(quan) {
this.cnt += quan;
};
});
app.controller('MainCtrl', function($scope, cnt, foo) {
$scope.cnt = cnt;
$scope.foo = foo;
$scope.inc = function() {
$scope.foo.inc(1); // why $scope used here
};
});
app.controller('TangentCtrl', function($scope, foo) {
$scope.jump = function() {
foo.inc(5); // Why $scope not used here and why it doesnot work when I add scope
};
});
In TangentCtrl Controller $ scope.jump Funktion seiner nicht $ Umfang mit foo.inc zuzugreifen, wie Sie im Code sehen kann ich kommentiert habe. Ich denke, es gibt hier ein Konzept, das ich nicht verstehe, kann mich jemand zu diesem Thema erleuchten.
'foo' ist ein Service? Das ist eine völlig andere Sache als das $ scope-Objekt. Dienste sind genau das und werden nicht einem '$ Scope' ausgesetzt. Sie sollen an verschiedenen Orten injiziert werden, damit Sie Ihre App mit Logik und Daten teilen können. Ohne den Rest des Kontexts des Beispiels zu sehen, ist es schwierig zu sagen, warum 'foo' manuell zum' $ scope' hinzugefügt wurde. Das ist in der Regel eine Übung, die ich persönlich zu steuern versuche. Ich mag es nicht, dass sie so miteinander verbunden sind. – ste2425
'$ scope.foo = foo;' Hier haben Sie eine Replik von foo in Ihr '$ scope' Objekt erstellt, und daher können Sie' $ scope.foo.inc() 'oder nur' foo.inc' verwenden, aber Im Tangens-Controller haben Sie keine Instanz von foo im '$ cope'-Objekt erstellt, aber' foo' wird als Dependency eingefügt. Sie können 'foo.inc()' direkt in Ihrem Controller verwenden. Hinweis: Im Haupt-Controller Sie müssen 'foo' nicht in das $ scope-Objekt kopieren, Sie können' foo.inc() 'direkt verwenden. –