2017-08-07 6 views
0

J'ai ce service:Injection de service dans la configuration. AngularJS

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

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

Et je veux injecter dans un .config de définir des itinéraires (pour lesquels j'utilise ui-routeur)

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} 
      }) 
... 

Ce n'est pas fonctionner correctement. Des idées sur je peux injecter les données dans ce service à être consulté par le .config?

Merci :)

+0

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

+0

Peut-être juste une faute de frappe dans votre quetion, mais votre nom de service commence par un majuscule mais quand vous l'incluez vous avez oublié cette majuscule – JeanJacques

+0

Non ce n'est pas à propos de ça je pense. Le problème est qu'il semble qu'il ne peut pas accéder au userService.userInfo [0] .firstName dans les paramètres. Si je change juste ça pour une chaîne, ça marche parfaitement bien –

Répondre

0

Lors de la configuration vous ne pouvez accéder aux fournisseurs, dans votre cas, vous pouvez accéder à UserServiceProvider en l'injectant dans votre app.config comme ceci:

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

Avec ce fournisseur, vous pouvez accéder à votre propriété de service avec $get() comme ceci par exemple:

UserServiceProvider.$get().userInfo[0] 

Here est un plunker de travail

+0

Mais comment puis-je accéder aux données à l'intérieur du .config pour les routes? L'objectif principal est que l'url sera en fonction du nom d'utilisateur –

+0

@ N.Car Vous devez remplacer 'params: {nom d'utilisateur: userService.userInfo [ 0] .firstName} 'par' params: {nom d'utilisateur: UserServiceProvide r. $ get(). userInfo [0] .firstName} 'et d'inclure' UserServiceProvider' dans la déclaration de configuration – JeanJacques

+0

Fonctionne !!! Merci beaucoup! Donc, quand vous voulez que quelque chose soit injecté dans un fichier .config, vous devez en faire un fournisseur, puis utiliser le $ get() pour obtenir ce qu'il contient? –

0

Pour les injections dans AngularJS, si vous allez donner les noms que vous allez injecter, vous devez donner tous les noms et la même façon que l'a déclaré.

Dans ce cas:

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

Je viens juste de l'ajouter mais ça ne marche toujours pas. Je pense qu'il ne reconnaît pas ce userService.userInfo [0] .firstName en tant que chaîne. Si je le change pour {nom d'utilisateur: "cliquez sur moi"} cela fonctionne très bien –

+0

Non, en fait cela ne fonctionne pas quand je bloque le userService comme vous l'avez dit. { app.config ([ "stateProvider $", "UserService", la fonction (stateProvider $, UserService) {$ stateProvider .state ("#", { templateURL: "index.html", contrôleur : "UserListController" }) .state ('utilisateurs, { url: '/ user /: nom d'utilisateur', templateURL: "view/userProfile.html", contrôleur : "UserListController", params: {nom d'utilisateur: "click me"} } –

0

Les constantes sont injectable tant dans la phase de configuration et la phase de l'exécution:

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

De la documentation:

constant (nom, valeur);

Enregistrez un service constant avec le $injector, tel qu'une chaîne, un nombre, un tableau, un objet ou une fonction. Comme le value, il n'est pas possible d'injecter d'autres services dans une constante.

Mais contrairement value, une constante peut être injecté dans une fonction de configuration du module (voir angular.Module) et il ne peut pas être surchargée par un AngularJS decorator.

Angular $provider API Reference - constant

+0

Merci! Cela fonctionne aussi! J'apprends toujours AngularJS et je ne savais pas à propos de constante. Je vais certainement y regarder :) –