Dynamic routing by sub domain with AngularJS

后端 未结 2 550
天命终不由人
天命终不由人 2021-02-11 04:53

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

相关标签:
2条回答
  • 2021-02-11 05:05

    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

    0 讨论(0)
  • 2021-02-11 05:15

    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
        }
      };
    });
    
    0 讨论(0)
提交回复
热议问题