2017-02-28 2 views
1

Je suis nouveau dans Angular js et je veux définir la variable globale que je peux utiliser sur différents services comme webservice url.Angular js: Comment utiliser les valeurs constantes dans d'autres services sans le changer

J'ai mis en œuvre app.js (module) comme ceci:

var app; 
(function() { 
    app = angular.module("ANG", []); 

    app.value('user', { 
     urlBase: '' 
    }); 
})(); 

Quand je veux utiliser des constantes de valeurs que je définis juste dans le defination de service et l'utiliser mais je veux enregistrer dans donc pas besoin de définir des valeurs encore et encore.

Exemple:

Lorsque je me connecte dans le système que je retourne des données avec webserviceurl avec elle et je mets cette URL dans le value.urlBase dans le contrôleur de connexion. Mais quand je vais à un service différent et que je veux l'utiliser, il redéfinit les valeurs à ''.

CODE à utiliser des valeurs constantes:

app.service('servicename', ["$http", "$q", 'user', function ($http, $q, user) { 
//access the user here but it gives value ''. 
console.log(user.urlBase); 
} 

Comment puis-je stocker à la fois et l'utiliser encore et encore?

Répondre

1

Vous pouvez réellement utiliser un fichier « constantes », comme suit:

export default angular 
    .module('my.module', []) 
    .constant('someConstant', Object.freeze({ 
    foo: 1, 
    bar: 2 
    }) 
    .name; 

Nous utilisons Object.freeze() dans le nôtre, mais vous pouvez utiliser immutable.js ou quelque chose comme ça pour empêcher la mutation.

+0

Je veux définir une valeur foo supposée lorsque je me connecte et que je veux utiliser après connexion dans tous les services est-ce possible? Parce que les valeurs que j'initialise dans le module lorsque je l'utilise dans n'importe quel service, il s'initialise à nouveau et je veux obtenir une valeur plus ancienne qui a été initialisée au moment de la connexion. –

+0

Comment puis-je utiliser cela dans le service et le contrôleur? –

1

Je vous suggère d'avoir un autre service, plutôt qu'une valeur.

Passez un entier UserService à vos services, qui contient l'objet utilisateur qui est soit accessible en tant que propriété ou récupéré via un getter:

app.factory('userService', function() { 

    var user = { 
     urlBase: '' 
    }; 

    return { 
     user: user 
    }; 
}; 

app.service('servicename', ['userService', function (userService) { 
    console.log(userService.user.urlBase); 
}]); 

Alors où vous définissez le URLBase, vous passez aussi le UserService . Les services sont généralement des singletons, il devrait donc préserver l'utilisateur entre les autres services.

MISE À JOUR:

Comme vous devez conserver les détails entre page est actualisée, un cookie est pas une mauvaise solution. Dans votre loginService, vous définissez la valeur du cookie et, dans vos autres services, lisez le cookie. Ceci est fait en utilisant le service de cookies $ dans angulaire (https://docs.angularjs.org/api/ngCookies/service/$cookies)

app.service('loginService', ['$cookie', function ($cookies) { 
    $cookies.put('userUrl', 'http://urlhere'); 
}]); 

app.service('servicename', ['$cookie', function ($cookies) { 
    console.log($cookies.get('userUrl')); 
}]); 

Une autre option consiste à utiliser le stockage local, et cela a SO exemple de le faire et la préservation de l'état:

How do I store data in local storage using Angularjs?

+0

Je l'ai déjà fait mais il s'initialise à nouveau avec des valeurs vides. –

+1

Vous devez définir urlBase sur une connexion réussie ** userService.user.urlBase = "votre URL" ** et vous pouvez l'utiliser dans n'importe quel emplacement où userService add dependency. –

+0

@AnkitBadiya Non à chaque fois que j'essaie de l'utiliser, il est réinitialisé et j'ai reçu une valeur vide dans urlBase. –

0
You can use constant files like this. 

app = angular.module("ANG", []); 
app.constant('user', { 
    urlBase: { 
      'url':'what ever the URL is' 
    } 
});