2016-01-22 42 views
0

我想将自定义模板来替换下面的代码在我路线角 - 采用动态路径与后备

angular.module('app').config ($stateProvider, $urlRouterProvider) -> 
    .state 'statistics', 
     controller: 'AppCtrl' 
     templateUrl: '/app/statistics.html' 

通过这样的事情:

angular.module('app').config ($stateProvider, $urlRouterProvider) -> 
    .state 'statistics', 
     controller: 'AppCtrl' 
     templateUrl: Something.resolveTemplatePath('/app/statistics.html') 

我的目标是增加一个前缀基于一些配置,但我需要知道具有前缀的路径实际上是否存在。

我需要在我的路由中调用这个,所以我可能需要把这个功能是一个Provider,对吧?我真的不知道如何检查模板是否存在。我相信Angular通过AJAX调用来加载模板,我发现我可以检查文件是否被找到,但我不确定最佳解决方案。

因为如果带有前缀的文件不存在,那么我必须加载没有前缀的文件(回退)。

这样做的最好方法是什么?谢谢。

回答

0

该前缀的配置存在于哪里?在你的Angular代码里面,还是会成为Gulp/Grunt这样的构建工具的一部分?

假设这个“前缀”是由名TEMPLATE_PREFIX的角度不变,你可以使用的$templateCache和UI路由器给出的组合templateProvider

templateProvider: Something.resolveTemplatePath('/app/statistics.html') 

Something的定义服务作为 -

angular.module('app').service('Something', function($templateCache, TEMPLATE_PREFIX) { 
    this.resolveTemplatePath = function(templateURL) { 
    return $templateCache.get(TEMPLATE_PREFIX + templateURL) || $templateCache.get(templateURL); 
    } 
}); 

有用于填充$templateCache很大的咕噜生成任务 - https://www.npmjs.com/package/grunt-angular-templates

+0

自发布时间以来,我做了类似的事情。感谢您的反馈意见!但是我被卡住了,因为当我从我的路由中调用它时,不会填充'$ templateCache'。我需要先填充它才能调用应用程序的路由部分。 – Vadorequest

+1

这就是我推荐使用JavaScript构建任务的原因,它会将您的html文件和制作一个JavaScript文件放入模板缓存中。看看我刚才提到的grunt模块。 – FrailWords