AngularJS-service in separater Datei
Meine app.js enthält
var app = angular.module('myApp', []).
config(['$routeProvider', function ($routeProvider, $http) {
...
}]);
Service sieht aus wie
app.service('MyService', function () {
addNums = function (text) {
return text + "123";
}
});
Und im Controller habe ich
function adminCtrl ($scope, MyService) {
$scope.txt = MyService.addNums("abc");
};
Sind Sie alle in separaten Dateien. Das problem ist, dass ich bin immer ein Fehler
Unknown provider: MyServiceProvider <- MyService
Sieht aus wie ich bin, etwas falsch zu machen.
- Sollten Sie verwenden
this.addNums = function (text)
stattaddNums = function (text)
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den provider Fehler kann auftreten, wenn Sie vergessen haben, zu sagen, Eckige laden Sie Ihre Anwendung Modul. E. g., haben Sie das auch in Ihre index.html Datei?:
Ihren Dienst fehlt "this.":
Fiddle.
Scheint es eine Menge Verwirrung in das Eckige Gemeinschaft über, wenn für die Nutzung des service() vs (Fabrik), und, wie man richtig code Sie. So, hier ist meine kurze Anleitung:
Den service () - Methode erwartet eine JavaScript Konstruktor-Funktion. Viele Angular code-Beispiele verwenden, die service() enthält code, der nicht eine Konstruktor-Funktion. Oft kehren Sie ein Objekt, die Art von Niederlagen der Zweck der Verwendung von service() — mehr dazu unten. Wenn ein Objekt erstellt und zurückgegeben wird, dann factory() kann stattdessen verwendet werden. Oft ist eine Konstruktor-Funktion ist alles, was benötigt wird, und der service() kann verwendet werden.
Anführungszeichen unten sind aus verschiedenen AngularJS Google Group posts:
Also, wenn Menschen die Nutzung von service() und den code "return"s ein Objekt, es ist irgendwie eine Verschwendung, weil der Weg JavaScript "neuen" Werk: "neue" zunächst erstellen Sie eine Marke neues JavaScript-Objekt (dann Sachen tun, mit Vorbild und rufen Sie dann die Funktion definiert durch myService(), etc. -- Einzelheiten, die wir nicht wirklich hier kümmern), aber da die Funktion definiert durch myService() liefert Objekt, "neuer" etwas tut, ein Gebot seltsam: es wirft Weg, das Objekt ist nur verbrachte Zeit mit der Erstellung und gibt das Objekt zurück, das myService () - Funktion erstellt, damit der "Abfall".
Auch, die undokumentierte Namenskonventionen für services zu sein scheint camelCase mit erstem Buchstaben klein geschrieben: z.B. myService.
factory
nachdem alle.factory()
eher alsservice()
wie es ist, wenn Sie mit den ehemaligen sollen Sie konstruieren den Gegenstand selbst, damit Sie die chance haben, welcher Klasse auch immer Sie wollen. Sie selbst schreiben Wenn Sie ein Objekt zu sein, muss erstellt und kehrte dann factory() kann stattdessen verwendet werden. (Hervorhebung von mir).Müssen Sie zurück addNums in der app.service callback.
Nun, wenn Sie MyService, eckig, wird dir die addNums-Funktion zu verwenden.
Daher sollten Sie es im controller so (Hinweis: es ist nicht der addNums call):
Nur als zusätzliche Klarstellung auf Brians Antwort, wenn Sie wollte noch den code nennen MyService.addNums könnten Sie Folgendes verwenden:
Dann könnte man noch verwenden
wenn Sie wollte, dies zu tun.