Comment définir AngularjJS URL de base de façon dynamique en fonction extraites de la variable d'environnement?

J'ai de développement et de production de l'environnement dans lequel mon URL diffèrent:

de production:

www.exmaple.com/page

développement:

dev.environment/project/page

Je sais que je peux mettre l'URL de base dans AngularJS avec le

<base href='/project/' />

mais cela ne veut pas m'aider ici. Avant que je charge mon AngularJS application, j'ai récupérer un fichier de config (en app.js avec le .run déclaration, qui lit une variable de l'environnement:

]).run([
  '$rootScope',
  '$http',
  function (
    $rootScope,
    $http
  ) {
    var configDeferred = $q.defer();

    //fetch config and set the API    
    $http.get('config.json').then(function(response) {
      $rootScope.config = response.data;
      configDeferred.resolve();
    });

    //Wait for the config to be loaded, then go to state
    $rootScope.$on('$stateChangeStart', function (event, next, current) {
      event.preventDefault();
      $q.all([configDeferred.promise]).then(function() {
        $state.transitionTo(next.name);
        return;
      });
    });

Est-il un moyen de définir dynamiquement l'URL de base, fondée sur une récupérés fichier de config dans AngularJS (peut-être avec un .htaccess)?

Tentative 1:
Essayez d'obtenir la configuration via .run et de définir l'url de base par ng-href:

Modifier la ligne de code suivante dans mon app.js:

//fetch config and set the API    
$http.get('config.json').then(function(response) {
  $rootScope.config = response.data;
  $rootScope.baseUrl = response.data.baseUrl; //'/project/'
  configDeferred.resolve();
});

et dans mon index.html:

<base ng-href="{{baseUrl}}" />

Il ressemble à ce qui ne fonctionne pas: lorsque je modifie l'attribut href de la balise de ng-href, il charge le contenu correctement, mais les changements de mon URL pour dev.environment/page au lieu de dev.environment/project/page

Mise à JOUR:
Le fichier de configuration:

{
  "mode": "development",
  "baseUrl": "/project/"
}
  • vraiment pas sûr de ce que l'implication est ou ce que vous avez besoin d'aide avec
  • A déclaré la question différemment
  • pas encore clair quel est le problème avec l'url...peut analyser location.href pour déterminer url existante si ça peut aider
  • Selon AngularJS docs, j'ai besoin de l'url de base dans mon index.html fichier (dans le <base> tag), qui est chargé en premier, puis app.js est chargé. Dans app.js j'ai un $requête http à un fichier de config, qui a le droit de l'environnement et par conséquent, le droit à l'URL de base qui doit être défini. Donc après avoir récupéré le fichier de config, j'ai besoin d'un moyen de définir l'url de base
  • ne pouvez-vous pas avoir le code de serveur, il suffit d'assigner une variable dans une balise script? Ou analyser le location.href ?
  • L'obtention et la configuration via une balise script n'est pas la voie que je veux faire (je veux utiliser le framework). L'analyse de l'emplacement.href est une option, mais une fois de plus, souhaitez-vous exactement comment le faire en utilisant le cadre?
  • vérifie : (1) est votre ng-app attribut de balise html? (2) je ne vois pas tout configDeferred.filtrer dans votre code (3) Lors de l'utilisation de ng-href utilisation inspecter l'élément pour voir si angulaire réellement injectée interpolées {{baseUrl}}
  • 1: oui 2: vous avez oublié de copier, de la mise à jour 3: C'est la mise à jour du html <base ng-href="/project/" href="/project/">
  • Pouvez-vous nous montrer votre config.json?
  • Je viens de l'ajouter
  • <base href="/" ng-href="{{baseUrl}}" > cela a fonctionné pour moi et en run block $rootScope.baseUrl = BASE_URL; //BASE_URL est récupéré à partir de config qui est imprégnée par gulp pendant le processus de génération

InformationsquelleAutor Daan | 2014-01-07