访问配置AngularJS中的主机名

时间:2013-06-02 00:42:03

标签: javascript angularjs

由于您无法访问.config内的服务,我如何才能访问$host中常见的$locationService等属性?

我正在尝试根据当前子域加载部分内容。 所有子域都指向基本主机doc root。

查看时:

example.com

templateUrl将是:

views/home.html

查看时:

spicy.example.com

templateUrl将是:

views/spicy/home.html

2 个答案:

答案 0 :(得分:7)

在app.run方法中,您可以使用$ routeChangeStart事件在执行路由之前进行拦截。在.config中,将templateURL指定为模板本身的文件(例如home.html,不带/ views)

app.config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'home.html',
        controller: 'HomeCtrl'
      });
    ...
});

然后您可以在.run中添加以下代码:

app.run(function ($rootScope,$location){
    $rootScope.$on('$routeChangeStart',function(event,next,current){
        next.templateUrl = "views/"+$location.host()+"/"+next.templateUrl;
    });
});

它将在views /< host> /home.html

下访问home.html

Plunker示例:http://embed.plnkr.co/82qV7uCZOBgZxjahhlU3/ 请注意我使用_而不是/来模拟文件所在的目录,具体取决于主机名。 Plunker不喜欢/在文件名中(虽然我能够运行它但拒绝保存文件)

答案 1 :(得分:0)

您可以在config中访问$$主机。你只是不能使用$ location。而是使用$ urlRouterProvider。但是,$ urlRouterProvider由于某种原因将$ location填充为空,因此如果您要根据不同的url主机更改配置env,也可以使用纯javascript窗口获取url主机。

E.g。

function config($urlRouterProvider) {
  if ($urlRouterProvider._router.locationService.$location)
    console.log(console.log($urlRouterProvider._router.locationService.$location.$$host))
  else
    console.log(window.location.host)
}