我正在研究在AngularJS指令中格式化模板的方法。最常见的是:
内联
// Directive.js
app.directive('flipCard', [
function() {
return {
template:
"<div class='cardslot' ng-class='{\"switch\":shouldFlip}'> \
<card-side candidate-model='currentCandidate' class='card-a-side'></card-side> \
<card-side candidate-model='nextCandidate' class='card-b-side'></card-side> \
</div>"
};
}
]);
优点:
缺点:
外部
// Directive.js
app.directive('directive', [
function() {
return {
templateUrl: '/views/partials/directive.html'
};
}
]);
// Directive.html
<div class="cardslot" ng-class="{'switch':shouldFlip}">
<card-side candidate-model="currentCandidate" class="card-a-side"></card-side>
<card-side candidate-model="nextCandidate" class="card-b-side"></card-side>
</div>
优点:
缺点:
这是A列中的一些,B列中的一些。所以如何在它们之间进行选择?什么时候内联格式更好?外部格式何时更适合?
更一般地说,我应该考虑其他方法吗?
答案 0 :(得分:1)
在我的项目中,我同时执行这两种方法;):
开发:为每个模板创建一个单独的文件(如果需要,可以使用模块子文件夹),这是一个好习惯,因为它维护简单,易读。
runtime / packaging-build:我使用html2js通过模板内容实时替换templateUrl字符串。
详细代码,优化生成的代码,更少的HTTP命中,缓存的模板等......
答案 1 :(得分:1)
我更喜欢第三种方法,即使用templateUrl引用现有标记中元素的id。恕我直言,我认为它与Angular的声明式方法更为一致
<div ng-app="pageModule"
ng-controller="parentCtrl">
<script type="text/ng-template" id="myTemplate">
<span ng-click="remove()">{{label}}</span>
</script>
<div my-directive></div>
</div>
var pageModule = angular.module('pageModule',[])
.controller('parentCtrl',function($scope) {
})
.directive('myDirective',function() {
return {
restrict : 'A',
templateUrl : 'myTemplate'