2

如何根据子域覆盖模板 URL?

我所有的子域都指向同一个文档根。

基础级域: example.com

$routeProvider.when('/', {templateUrl: 'views/example.com/home.html'});

子域: sub.example.com

$routeProvider.when('/', {templateUrl: 'views/sub.example.com/home.html'});

部分应该对静态/动态内容无动于衷。如果部分内部的控制器正在对数据进行服务调用,则此拦截器不应干扰。

4

2 回答 2

3

简单明了:我会在设置路由的函数中检查 window.location,根据子域设置一个变量,然后在设置路由时使用该变量。如:

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:使用 JavaScript,而不是 Angular

于 2013-06-02T23:04:50.870 回答
2

这个问题的延续导致了这个问题,但答案适用于两者:

我决定采用本地策略有两个原因:

  1. XML 请求没有额外的开销。
  2. 当资源不存在时,404 消息不会污染控制台日志。

服务.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;
}).

控制器.js

controller('AppController', ['$scope','Views', function($scope, Views) {    
  $scope.$on("$routeChangeSuccess",function( $currentRoute, $previousRoute ){
    $scope.page = Views.returnView();
  });
}]).

过滤器.js

filter('objExists', function () {
  return function (property) {
    try {
      return property;
    } catch (err) {
      return null
    }
  };
});
于 2013-06-14T15:58:36.457 回答