Dynamic routing by sub domain with AngularJS

匿名 (未验证) 提交于 2019-12-03 02:54:01

问题:

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:

  1. There is no additional overhead of XML request.
  2. 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     }   }; });


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!