2017-08-07 1 views
0

Ich habe diesen Service:Service-Injektion in Config. AngularJS

app.service("UserService", function(){ 

    var userService = {}; 
    userService.userInfo = [ 
     {firstName: "John", lastName: "Doe"}, 
     {firstName: "Carl", lastName: "Smith"} 
     ]; 
    return userService; 
}); 

Und ich will sie in eine .config injizieren Routen zu definieren (für die ich ui-Router bin mit)

app.config(["userService", function($stateProvider, userService){ 
    $stateProvider 
    .state("#",{ 
     templateUrl: "index.html", 
     controller: "UserListController" 
    }) 
    .state('users', { 
     url: '/user/:username', 
     templateUrl: "view/userProfile.html", 
     controller: "UserListController", 
     params: { username: userService.userInfo[0].firstName} 
      }) 
... 

Dieses nicht ist funktioniert richtig. Irgendwelche Ideen auf, kann ich die Daten in diesem Dienst injizieren, um von der .config zugegriffen zu werden?

Danke

+0

sehen diese https://stackoverflow.com/questions/15937267/inject-service-in-app-config – talentedandrew

+0

Vielleicht in Ihrem quetion nur ein Tippfehler ist es, aber Ihr Service-Namen mit einem Start Großbuchstaben, aber wenn Sie es einschließen, haben Sie diesen Großbuchstaben vergessen – JeanJacques

+0

Nein, es geht nicht darum, denke ich. Das Problem ist, dass es nicht auf den userService.userInfo [0] .firstName in params zugreifen kann. Wenn ich das nur für eine Saite ändere funktioniert es einwandfrei. –

Antwort

0

Während der Konfiguration können Sie nur den Zugriff auf Anbieter, können in Ihrem Fall, dass Sie auf UserServiceProvider zugreifen, indem Sie es in Ihrem app.config wie diese Injektion:

app.config(function(UserServiceProvider){ 
    // Config stuffs... 
}) 

Mit Bei diesem Anbieter können Sie wie folgt mit $get() auf Ihr Serviceobjekt zugreifen:

UserServiceProvider.$get().userInfo[0] 

Here ist ein Arbeits Plunker

+0

Aber wie kann ich auf die Daten in der .config für die Routen zugreifen? Das Hauptziel ist, dass die URL wird nach dem Benutzernamen –

+0

@ N.Car Sie müssen ersetzen 'params: {Benutzername: userService.userInfo [ 0] .firstName} 'nach' params: {Benutzername: UserServiceProvide r. $ get(). userInfo [0] .firstName} 'und' UserServiceProvider' in die Config-Deklaration aufzunehmen – JeanJacques

+0

Funktioniert !!! Vielen Dank! Also, wenn Sie möchten, dass etwas in eine .config injiziert wird, müssen Sie es zu einem Provider machen und dann das $ get() benutzen, um zu erhalten, was drin ist? –

0

Für Injektionen in AngularJS :), wenn Sie die Namen geben, gehen Sie injizieren wollen, müssen Sie die Namen, alles geben und auf die gleiche Weise es erklärt.

In diesem Fall:

app.config(["$stateProvider", "UserService", function($stateProvider, userService){ 
+0

Ich habe es einfach hinzugefügt, aber es funktioniert immer noch nicht. Ich denke, er erkennt dieses userService.userInfo [0] .firstName nicht als Zeichenfolge. Wenn ich es für {username: "click me"} ändere es funktioniert gut –

+0

Nein, eigentlich funktioniert es nicht, wenn ich den userService wie Sie gesagt inhect. { app.config ([ "$ stateProvider", "Userservice", function ($ stateProvider, Userservice) { $ stateProvider .state ("#", { templateUrl: "index.html", Controller: "UserListController" }) .state ('Benutzer', { url: '/ user /: username', templateUrl: "view/userProfile.html", Controller: "UserListController", params: {username: "click me"} } –

0

Konstanten in injizierbarer ist sowohl die Konfigurationsphase und die Laufphase:

app.constant("UserConstant", { 
    userInfo:[ 
     {firstName: "John", lastName: "Doe"}, 
     {firstName: "Carl", lastName: "Smith"} 
    ] 
}); 

Aus dem Text & Tabellen:

Konstante (name, value);

Registrieren Sie einen konstanten Dienst mit der , z. B. eine Zeichenfolge, eine Zahl, ein Array, ein Objekt oder eine Funktion. Wie die value ist es nicht möglich, andere Dienste in eine Konstante zu injizieren.

Aber im Gegensatz zu value ein konstanten kann in eine Modulkonfigurationsfunktion (siehe angular.Module), und es durch eine AngularJS decorator wird nicht überschrieben injiziert werden.

Angular $provider API Reference - constant

+0

Danke !! Es funktioniert auch! Ich lerne immer noch AngularJS und wusste nicht über konstant. Werde definitiv nachsehen :) –

Verwandte Themen