AngularJS-使用指令生成<td>不起作用
AngularJS - Using a directive to produce a <td> not working
我有一大组重复的HTML,我正试图为其创建指令。我以前创建过指令,主要是在DIV上,但这是第一次尝试<table>
/<td>
。
HTML:
<div ng-repeat="entries in Categories">
<table>
<tbody>
<tr ng-repeat="history in entries.InfoEntries">
<th>
{{ history.Name }}
</th>
<!-- Trying to produce directive of this <td> -->
<td ng-repeat="status in history.History.slice(0, 12) track by $index">
<span ng-switch="status">
<span ng-switch-when="0"></span>
<span ng-switch-when="U">U</span>
<span ng-switch-when="D">D</span>
<span ng-switch-when="1">1</span>
<span ng-switch-when="2">2</span>
<span ng-switch-when="3">3</span>
<span ng-switch-when="4">4</span>
<span ng-switch-when="5">5</span>
<span ng-switch-when="6">6</span>
<span ng-switch-default></span>
</span>
</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr ng-repeat="history in entries.InfoEntries">
<th>
{{ history.Name }}
</th>
<!-- Trying to produce directive of this <td> -->
<td ng-repeat="status in history.History.slice(12, 24) track by $index">
<span ng-switch="status">
<span ng-switch-when="0"></span>
<span ng-switch-when="U">U</span>
<span ng-switch-when="D">D</span>
<span ng-switch-when="1">1</span>
<span ng-switch-when="2">2</span>
<span ng-switch-when="3">3</span>
<span ng-switch-when="4">4</span>
<span ng-switch-when="5">5</span>
<span ng-switch-when="6">6</span>
<span ng-switch-default></span>
</span>
</td>
</tr>
</tbody>
</table>
<table>
<tbody>
<tr ng-repeat="history in entries.InfoEntries">
<th>
{{ history.Name }}
</th>
<!-- Trying to produce directive of this <td> -->
<td ng-repeat="status in history.History.slice(24, 36) track by $index">
<span ng-switch="status">
<span ng-switch-when="0"></span>
<span ng-switch-when="U">U</span>
<span ng-switch-when="D">D</span>
<span ng-switch-when="1">1</span>
<span ng-switch-when="2">2</span>
<span ng-switch-when="3">3</span>
<span ng-switch-when="4">4</span>
<span ng-switch-when="5">5</span>
<span ng-switch-when="6">6</span>
<span ng-switch-default></span>
</span>
</td>
</tr>
</tbody>
</table>
</div>
正如你从上面看到的,与上面的<table>
相比,唯一改变的是.slice
中的值范围,所以我将通过将它们传递到我的指令中
<td history-status slice-status-history-start-range='0' slice-status-history-end-range='12'></td>
我的指令:
app.directive('historyStatus', function () {
return {
restrict: 'A',
replace: false,
transclude: true,
template: '<td ng-repeat="status in history.History.slice(sliceStartRange, sliceEndRange) track by $index">' +
'<span ng-switch="status">' +
'<span ng-switch-when="U">U</span>' +
'<span ng-switch-when="D">D</span>' +
'<span ng-switch-when="1">1</span>' +
'<span ng-switch-when="2">2</span>' +
'<span ng-switch-when="3">3</span>' +
'<span ng-switch-when="4">4</span>' +
'<span ng-switch-when="5">5</span>' +
'<span ng-switch-when="6">6</span>' +
'<span ng-switch-default></span>' +
'</span>' +
'</td>',
scope: {
sliceStartRange: '=sliceStatusHistoryStartRange',
sliceEndRange: '=sliceStatusHistoryEndRange'
}
};
});
通过以上操作,指令不会显示任何结果,控制台中也不会出现任何错误。
我认为问题是你已经隔离了指令的范围,这意味着你需要显式地将"历史"传递到那里:
HTML:
<td history-status history="history" slice-status-history-start-range='0' slice-status-history-end-range='12'></td>
在您的指令中:
scope: {
sliceStartRange: '=sliceStatusHistoryStartRange',
sliceEndRange: '=sliceStatusHistoryEndRange',
history: '='
}
您将生成一个无效的标记,因为您将在"td"中添加一个"td"。。
将replace设置为true。plkr:http://plnkr.co/edit/hk9GJ7tiL0VANhcSiBax?p=preview
<head>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.js"></script>
<script>
angular.module("ng").directive('historyStatus', function () {
return {
restrict: 'A',
replace: true,
template: '<td ng-repeat="status in datasrc track by $index">' +
'<span ng-switch="status">' +
'<span ng-switch-when="U">U</span>' +
'<span ng-switch-when="D">D</span>' +
'<span ng-switch-when="1">1</span>' +
'<span ng-switch-when="2">2</span>' +
'<span ng-switch-when="3">3</span>' +
'<span ng-switch-when="4">4</span>' +
'<span ng-switch-when="5">5</span>' +
'<span ng-switch-when="6">6</span>' +
'<span ng-switch-default></span>' +
'</span>' +
'</td>',
scope: {
sliceStartRange: '=sliceStatusHistoryStartRange',
sliceEndRange: '=sliceStatusHistoryEndRange',
datasrc: '=datasrc'
}
};
}).run(function($rootScope){
});
</script>
</head>
<body ng-app>
<table ng-init="datasrc=['1','2','3','4','U','A']">
<tbody>
<tr>
<td datasrc="datasrc" history-status slice-status-history-start-range='0' slice-status-history-end-range='12'></td>
</tr>
</tbody>
</table>
</body>
这是我答应给你的样本。
如果你还有问题,请毫不犹豫地问!
您也可以在类中使用hasStatus作用域变量。
<span> {{ "UD123456".indexOf(status)>-1 ? status : '-' }}</span>
这有帮助吗?
相关文章:
- 在<页眉>标签
- 如何更改<svg>标记为<img>用js标记
- 如何逃离<>在javascript下划线模板中
- 有没有一种方法可以检测ios<>使用jquery和触发器操作形成导航按钮
- 正则表达式,它允许除“”之外的所有字符<>_;{}[]”;
- ajax调用:响应<->数据类型
- 如果所有三个文本框<>然后是100%
- CORS的问题.烧瓶<->AngularJS
- 有没有一种方法可以创建与Java<->JSON映射对象,如JSON.stringfy(jsObject)创建的
- 什么是%<>%调用了语法
- JavaScript返回值:What dos<>意思是
- JavaScript中哪种类型的值对应于Java`List<>`
- 如何发送类似“<>"在参数中使用$.ajax-to-server
- 不等于<>操作员不工作
- jquery附加函数转换<>到实体名称
- 只有当超过3个元素时才显示更多内容按钮,否则不显示.使用jquery's:lt:gt
- 为什么在<>ckeditor中不支持
- url有效性的Java脚本regexp,带有<>
- 设计Javascript前端<->C++后端通信
- 比较查询运算符ObjectId<->日期