Comment puis-je remplacer l'URL du modèle en fonction du sous-domaine?
Tous mes sous-domaines indiquent la même racine de doc.
Domaine de base: exemple.com
$routeProvider.when('/', {templateUrl: 'views/example.com/home.html'});
Sous-domaine: sub.example.com
$routeProvider.when('/', {templateUrl: 'views/sub.example.com/home.html'});
Les partiels doivent être indifférents au contenu statique / dynamique. Si un contrôleur à l'intérieur d'une partie effectue des appels de service pour les données, cet intercepteur ne doit pas interférer avec cela.
Facile et propre: j'observerais la fenêtre.location dans la fonction qui configure vos itinéraires, définit une variable en fonction du sous-domaine, puis utilise cette variable lors de la configuration des routes. Comme dans:
var isSubDomain = window.location.host.indexOf("sub") == 0 var urlPath = isSubDomain ? "sub.example.com" : "example.com"; ... $routeProvider.when('/', {templateUrl: 'views/' + urlPath + '/home.html'});
TL; DR: utilisez JavaScript, pas angulaire
Une suite à ce problème conduit à cette question , mais la réponse est applicable pour les deux:
J'ai décidé d'aller avec une stratège locale pour deux raisons:
Services.js
factory('Views', function($location,$route,$routeParams,objExistsFilter) { var viewsService = {}; var views = { subdomain1:{ 'home.html':'/views/subdomain1/home.html' }, subdomain2:{ }, 'home.html':'/views/home.html', }; viewsService.returnView = function() { var y = $route.current.template; var x = $location.host().split("."); return (x.length>2)?(objExistsFilter(views[x[0]][y]))?views[x[0]][y]:views[y]:views[y]; }; viewsService.returnViews = function() { return views; }; return viewsService; }).
Controllers.js
controller('AppController', ['$scope','Views', function($scope, Views) { $scope.$on("$routeChangeSuccess",function( $currentRoute, $previousRoute ){ $scope.page = Views.returnView(); }); }]).
Filters.js
filter('objExists', function () { return function (property) { try { return property; } catch (err) { return null } }; });