web-dev-qa-db-fra.com

comment définir des constantes pour Angular JS dans un fichier différent

Je souhaite écrire plusieurs constantes pour mon Angular JS app. Je veux les écrire dans un fichier séparé et je veux y accéder.

J'ai essayé avec IIFE (expression de fonction immédiatement appelée) comme ceci,

constants.js

var Constants = (function () {

    var allConstants = {
        "url": 'abc',
        "name": "anijit",
        "sn": "sau"
    }

    return allConstants
})();
console.log('defined constants', Constants)

Mais quand j'ai essayé d'y accéder, il affiche l'erreur Constants not defined. Où j'ai fait la mauvaise chose? 

Je veux y accéder en utilisant Constants.url dans la manière et je ne veux pas faire d'appel $http ou quelque chose comme ça Comment y parvenir?

4
Anijit Sau

En tant que tel, vous utilisez AngularJS, vous pouvez utiliser Constant Service . comme une constante peut être injecté n'importe où, y compris les appels de configuration dans l'application angularjs.

En outre, comme le nom l'indique, les constantes sont fixes, elles sont appliquées avant que d'autres méthodes ne soient fournies. Voir $ include.constant () pour plus de détails.

// Storing a single constant value
var app = angular.module('myApp', []);

app.constant('appName', 'My App');

// Now we inject our constant value into a test controller
app.controller('TestCtrl', ['appName', function TestCtrl(appName) {
    console.log(appName);
}]);

// Storing multiple constant values inside of an object
// Note: values in the object mean they can be modified
var app = angular.module('myApp', []);

app.constant('config', {
    appName: 'My App',
    appVersion: 1.0,
    apiUrl: 'http://www.facebook.com?api'
});

// Now we inject our constant value into a test controller
app.controller('TestCtrl', ['config', function TestCtrl(config) {
    console.log(config);
    console.log('App Name', config.appName);
    console.log('App Name', config.appVersion);
}]);
10
Siddharth Pandey

fichier 1:

(function () {
  'use strict';

  angular.module('app', [
    'app.constants'
  ]).value('CONSTANT_EXAMPLE', 'value example')
    .value('OTHER_EXAMPLE', 'other example');

})();

fichier 2:

(function () {

  'use strict';

  angular.module('app.example-use', [])
    .factory('example', example);

  example.$inject = ['CONSTANT_EXAMPLE']; // and others injections

  function example(CONSTANT_EXAMPLE) { // and others injections

    function getConstantExample() {
      var option = CONSTANT_EXAMPLE;
      // use ...
    }

    return {
      getConstantExample: getConstantExample
    };
  }

})();
1
Eduardo Lima

Vous pouvez utiliser un factory (J'utilise toujours toujours storage.factory.js dans mes projets). Facile à injecter partout et vous pouvez utiliser certaines fonctions pour configurer vos constantes ou les modifier un peu si vous le souhaitez.

angular.module('app')
    .factory('storage', storageFactory);

    function storageFactory() {
        const data = {
            serverAddress : 'http://server.address:port'
        };

        return data;       
    }
1
Alburkerk