由于我是Angular JS的新手,我想知道如何加载外部模板并将其与一些数据一起编译到目标div
中。
例如我有这个模板:
<script type="text/ng-template">
<img src="{{Thumb}}" />
<script>
应该包含模板的div
:
<div data-ng-controller=" ... "></div>
模板位于文件夹/templates/test.php
中的某个位置。是否有像构建指令那样进行模板加载的构建,并根据一些替换密钥{{Thumb}}
的数据进行编译(当然还有许多其他数据)?
编辑:如果我在网站的根目录中使用$routes
并加载模板怎么办?怎么可能实现呢?
答案 0 :(得分:26)
使用$templateRequest
,您可以通过其网址加载模板,而无需将其嵌入HTML页面。如果模板已经加载,它将从缓存中获取。
app.controller('testCtrl', function($scope, $templateRequest, $sce, $compile){
// Make sure that no bad URLs are fetched. If you have a static string like in this
// example, you might as well omit the $sce call.
var templateUrl = $sce.getTrustedResourceUrl('nameOfTemplate.html');
$templateRequest(templateUrl).then(function(template) {
// template is the HTML template as a string
// Let's put it into an HTML element and parse any directives and expressions
// in the code. (Note: This is just an example, modifying the DOM from within
// a controller is considered bad style.)
$compile($("#my-element").html(template).contents())($scope);
}, function() {
// An error has occurred here
});
});
请注意,这是手动方式,而在大多数情况下,最好的方法是define directive使用templateUrl
属性获取模板。
答案 1 :(得分:18)
在Angular中有两种使用模板的方式(我至少知道两种方式):
第一个使用内联模板(在同一个文件中)使用以下语法:
<script type="text/ng-template">
<img ng-src="{{thumb}}">
</script>
第二个(你想要的)是外部模板:
<img ng-src="{{thumb}}">
所以您需要做的是从模板中删除脚本部分,然后在想要的div中使用ng-include,如下所示:
<div ng-include="'templates/test.php'"></div>
需要双引号和单引号才能工作。 希望这会有所帮助。
答案 2 :(得分:2)
我们说我有这个index.html:
<!doctype html> <html lang="en" ng-app="myApp">
<body>
<script src="tpl/ng.menu.tpl" type="text/ng-template"></script>
<mainmenu></mainmenu>
<script src="lib/angular/angular.js"></script>
<script src="js/directives.js"></script>
</body>
</html>
我有一个模板文件&#34; tpl / ng.menu.tpl&#34;只有这4行:
<ul class="menu">
<li><a href="#/view1">view1</a></li>
<li><a href="#/view2">view2</a></li>
</ul>
我的指示映射&#34; js / directives.js&#34;:
angular.module('myApp',['myApp.directives']);
var myModule = angular.module('myApp.directives', []);
myModule.directive('mainmenu', function() {
return {
restrict:'E',
replace:true,
templateUrl:'tpl/ng.menu.tpl'
}
});