2014-12-25 69 views
4

我一直無法從$ templateCache加載模板。

如何我把模板$ templateCache:

var app = angular.module('anglober', ['anglober.controllers', 'anglober.services', 'anglober.directives']).run(function ($templateCache, $http) { 
    $http.get('anglober/js/invitation/invitationModal.tpl.html', {cache: $templateCache}); 
    $http.get('anglober/js/modal/ajaxModal.tpl.html', {cache: $templateCache}); 
    $http.get('anglober/js/ajaxLoader/ajaxLoader.tpl.html', {cache: $templateCache}); 
    $http.get('anglober/js/modal/modalContent.tpl.html', {cache: $templateCache}); 
    $http.get('anglober/js/modal/simpleModal.tpl.html', {cache: $templateCache}); 
    $http.get('anglober/js/mog/topMogs.tpl.html', {cache: $templateCache}); 

我如何加載它們:

angular.module('anglober.directives').directive('topMogs', ['$templateCache', function ($templateCache) { 
return { 
    restrict : 'E', 
    template: $templateCache.get('topMogs.tpl.html') 
    //Tried this too 
    // templateUrl: 'topMogs.tpl.html' 
}; 
}]); 

在我的網絡瀏覽器選項卡上,我可以看到被加載在頁面加載的模板。

One of template or templateUrl options is required. 

我在做什麼錯:

但是叫我的指令時,我得到了下面的錯誤?

感謝

+0

你應該提到完整的網址'anglober/js/mog/topMogs.tpl.html' –

+0

你正在爲自己創造額外的工作,並且什麼都不做。從'run'方法中刪除所有'$ http.get',並讓'$ templateCache'完成它的工作。在你的指令中使用'templateUrl'。你在做什麼是一件很奇怪的事情。 – cgTag

+0

感謝您的回答。我想要做的是通過只放置模板文件名(無路徑)訪問我的模塊中的模板文件。我應該在模塊中放置模板文件的絕對路徑嗎?我發現有點奇怪,必須把這樣的完整路徑:templateUrl:pathToModule/templateFile,而不是templateUrl:templateFile,因爲我把我的模板文件放在與我的模塊js文件相同的目錄中。 – Komo

回答

7

微型除了這個舊線:雖然有一些方法來實現自己的目標,我發現對我來說,最好的辦法就是到$templateCache邏輯添加到我的每個應用程序的指令。這樣我就可以避免使用任何外部軟件包,如grunt angular-templates,這非常棒 - 但對我的應用程序來說太過矯枉過正。

angular.module('MyApp') 
.directive('MyDirective', ['$templateCache', function($templateCache) { 
    return { 
     restrict: 'E', 
     template: $templateCache.get('MyTemplate'), 
     controller: 'MyController', 
     controllerAs: 'MyController' 
    }; 
}]).run(function($templateCache, $http) { 
    $http.get('templates/MyTemplate.html').then(function(response) { 
     $templateCache.put('MyTemplate', response.data); 
    }) 
}); 

希望這會有所幫助!

+1

我不明白爲什麼要這樣做。這不是在templateCache中的「編譯」時間加載模板,而是使用http調用檢索模板並將其加載到緩存中,但是AngularJS默認不會這麼做? – David

+1

如果您想要覆蓋某些框架使用的默認$ templateCache值會很有用,例如對於UI網格: $ http.get(「app/templates/ui-grid-filter.html」)。then(function(response){template_cache.put('ui-grid/ui-grid-filter' ,response.data); }); – anre

+0

這給出了一個錯誤:'TypeError:$ http是未定義的'。 – zygimantus