使用angular指令生成完全动态的列(字段)和行(数据)表
generating table using angular directive with completely Dynamic columns(fields) and rows(data))
我想写一个指令(使用angular)创建具有动态列(字段)和行(数据)的表。列名称将作为字符串数组传递给指令,如下所示:$scope.TableDate.Fields = ['Name', 'LastName','ssn'];
,行(数据)将作为json对象数组传递,如下所示:
$scope.TableDate.Data = [
{ Name: 'a', LastName: 'b', ssn:456 },
{ Name: 'c', LastName: 'd', ssn:123 }
];
如果唯一的数据是动态的(具有固定的列名),我的代码工作得很好这是我的代码与固定列名
App.directive('tableGenerator', function () {
return {
template:
' <table border="1" ng-Click="Test()">' +
'<thead>' +
'<tr>' + '<th>' + 'Name' + '</th>' +
'<th>' + 'LastName' + '</th>' +
'<th>' + 'ssn' + '</th>' +'</tr>' +
'</thead>' +
'<tbody' + ' ' + 'ng-repeat="tb in tbodydata"' + '>' +
'<tr>'+ '<td>' + '{{tb.Name}}' + '</td>' +
'<td>' + '{{tb.LastName}}' + '</td>' +
'<td>' + '{{tb.ssn}}' + '</td>' + '</tr>' +
'</table>',
restrict: 'E',
replace: true,
scope: {
tbodydata: "=", fields: "="
},
link: function ($scope, $element, $attrs, form) {
$scope.field = $scope;
}
};
});
但是因为一切都应该是动态生成的,我的实际代码如下:
var App = angular.module('Test', []);
App.directive('tableGenerator', function () {
return {
template:
' <table border="1">' +
'<thead>' +
'<tr>' +
'<th' + ' ' + 'ng-repeat="fieldName in fields"' + '>' +
'{{fieldName}}' +
'</th>' +
'</tr>' +
'</thead>' +
'<tbody' + ' ' + 'ng-repeat="tb in tbodydata"' + '>' +
'<tr>'+
' <td' + ' ' + 'ng-repeat="fieldName in fields"' + '>' +
'{{tb.fieldName}}' +
'</td>' +
'</tr>' +
'</table>',
restrict: 'E',
replace: true,
scope: {
tbodydata: "=", fields: "="
},
link: function ($scope, $element, $attrs, form) {
$scope.field = $scope;
}
};
});
App.controller('TableGenerator', function ($scope) {
$scope.TableDate = {};
$scope.TableDate.Fields = ['Name', 'LastName','ssn'];
$scope.TableDate.Data = [
{ Name: 'a', LastName: 'b', ssn:456 },
{ Name: 'c', LastName: 'd', ssn:123 }
];
});
在HTML中使用,如下所示:
<table-generator tbodydata="TableDate.Data" fields="TableDate.Fields"></table-generator>
我必须使用两个ng-repeat一个用于迭代日期,另一个用于迭代字段主要问题是我无法访问父ng-repeat的作用域值,通过指向其他ng-repeat的作用域变量,如{{tb.fieldName}}
, **不起作用。什么好主意吗?
您正在做的错误是您试图调用tb.fieldName
,这相当于tb = { fieldName: 'myvalue'}
。
你不想那样,对吧?
如果你的属性名是字符串,你访问一个对象的特定属性的方式是这样做
tb[fieldName]
阅读更多
从上面的页面。如果你的对象看起来像这样:
var myCar = new Object();
myCar.make = "Ford";
myCar.model = "Mustang";
myCar.year = 1969;
你也可以这样访问它:
myCar["make"] = "Ford";
myCar["model"] = "Mustang";
myCar["year"] = 1969;
相关文章:
- Jquery添加输入字段和日期选择器
- 在jquery中,从同一对象的属性设置输入字段和标签的正确方法是什么
- 为什么在使用 formValidation.js 时需要指定字段的行属性
- 验证输入字段和块字符
- 正在设置字段和'带有'陈述
- jQuery克隆单个字段和增量ID
- 让引导日期时间选择器出现在字段和图标上,而不重复
- 组合功能以使用 Jquery 在一组单选按钮中显示输入字段和单选按钮
- JavaScript,循环字段和验证
- 检查 2 个输入字段和一个选择字段,以便在它们全部填写后进行更改
- 修复融合表映射中不起作用的搜索字段和表
- 创建一个带有一个字段和按钮的 HTML 表单
- 如何在 Meteor 中使用多个输入字段和单个更新按钮更新文档
- ios设备,“必填”字段和感谢消息
- 按数组分组并在主数组中添加字段和子数组
- Angular.js可过滤列表,通过选择字段和可点击地图预定义值
- 当某些字段和表数据为空时停止保存
- 在表中添加和删除[带有输入字段]的行
- jQuery验证与文本输入和选择字段的行
- 使用angular指令生成完全动态的列(字段)和行(数据)表