由于您无法访问.config
内的服务,我如何才能访问$host
中常见的$locationService
等属性?
我正在尝试根据当前子域加载部分内容。 所有子域都指向基本主机doc root。
查看时:
example.com
templateUrl将是:
views/home.html
查看时:
spicy.example.com
templateUrl将是:
views/spicy/home.html
答案 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.htmlPlunker示例: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)
}