2016-01-22 65 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