可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
How do I override template URL based on sub domain?
All of my sub domains point to the same doc root.
Base level domain: example.com
$routeProvider.when('/', {templateUrl: 'views/example.com/home.html'});
Sub-domain: sub.example.com
$routeProvider.when('/', {templateUrl: 'views/sub.example.com/home.html'});
Partials should be indifferent to static / dynamic content. If a controller inside a partial is making service calls for data this interceptor shouldn't interfere with that.
回答1:
Easy and clean: I would inspect window.location in the function that sets up your routes, set a variable depending on the subdomain, then use that variable when setting up the routes. As in:
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: use JavaScript, not Angular
回答2:
A continuation fo this problem lead to this question, but the answer is applicable for both:
I decided to go with a local stradegy for two reasons:
- There is no additional overhead of XML request.
- 404 messages wont polute console logs when resource doesn't exist.
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 } }; });