angularjs多维数组数据绑定
angularjs multidimensional array data binding
我想使用 angularjs 在基于多维数组 [matrix] 的输入表单上显示和绑定值。这是我用来生成数组和变量以保存结果的js函数
function getMatrix(rows, cols, defaultValue){
var arr = new Array(rows);
for (var i = 0; i < rows; i++) {
arr[i] = new Array(cols);
for (var j = 0; j < cols ; j++) {
if(defaultValue !== null){
arr[i][j] = defaultValue;
}
else{
arr[i][j] = {"value":i+"-"+j};
}
};
};
return arr;
}
$scope.data = getMatrix(3,3,getMatrix(2,3,null));
这里是 html table 用于显示数据
<table>
<tr ng-repeat="row in data">
<td ng-repeat="cell in row track by $index">
<table>
<tr ng-repeat="deepRow in cell">
<td ng-repeat="deepCell in deepRow track by $index">
<input type="text" style="width: 20px;" ng-model="deepCell.value">
</td>
</tr>
</table>
</td>
</tr>
</table>
当我在普通 n x n 数组中显示和绑定时,一切正常,但是当我尝试创建和绑定嵌套多维数组时,它没有按预期工作。当我更改深度数组中的值时,同一行的值也会更改。
这是 plunker 的代码。 Multidimensional Array Binding
我是不是漏掉了什么?
如果将第二个参数更改为 getMatrix(1, 1, null),问题将会得到解决。这非常清楚地向您表明数组中的元素始终相同。当然是,你说是默认值
为防止出现此问题,您需要为每个单元格调用 getMatrix(2, 3, null)。所以也许 defaultValue 应该是一个产生默认值的函数。这是一种方法。查看您对 plunkr 的编辑:
http://plnkr.co/edit/oPCBOcfBiAxwtwNhr6vp?p=preview
// Code goes here
angular.module('MatrixApp', [])
.controller('MatrixCtrl', ['$scope',
function($scope) {
function getMatrix(rows, cols, defaultValueFn){
var arr = new Array(rows);
for (var i = 0; i < rows; i++) {
arr[i] = new Array(cols);
for (var j = 0; j < cols ; j++) {
if(defaultValueFn !== null){
arr[i][j] = defaultValueFn();
}
else{
arr[i][j] = {"value":i+"-"+j};
}
};
};
return arr;
}
var defaultX = 3;
var defaultY = 2;
var defaultVal = null;
$scope.matrixDefaultFn = function() {
return getMatrix(defaultX, defaultY, defaultVal)
}
$scope.data = getMatrix(3,3, $scope.matrixDefaultFn);
}
]);
我想使用 angularjs 在基于多维数组 [matrix] 的输入表单上显示和绑定值。这是我用来生成数组和变量以保存结果的js函数
function getMatrix(rows, cols, defaultValue){
var arr = new Array(rows);
for (var i = 0; i < rows; i++) {
arr[i] = new Array(cols);
for (var j = 0; j < cols ; j++) {
if(defaultValue !== null){
arr[i][j] = defaultValue;
}
else{
arr[i][j] = {"value":i+"-"+j};
}
};
};
return arr;
}
$scope.data = getMatrix(3,3,getMatrix(2,3,null));
这里是 html table 用于显示数据
<table>
<tr ng-repeat="row in data">
<td ng-repeat="cell in row track by $index">
<table>
<tr ng-repeat="deepRow in cell">
<td ng-repeat="deepCell in deepRow track by $index">
<input type="text" style="width: 20px;" ng-model="deepCell.value">
</td>
</tr>
</table>
</td>
</tr>
</table>
当我在普通 n x n 数组中显示和绑定时,一切正常,但是当我尝试创建和绑定嵌套多维数组时,它没有按预期工作。当我更改深度数组中的值时,同一行的值也会更改。
这是 plunker 的代码。 Multidimensional Array Binding
我是不是漏掉了什么?
如果将第二个参数更改为 getMatrix(1, 1, null),问题将会得到解决。这非常清楚地向您表明数组中的元素始终相同。当然是,你说是默认值
为防止出现此问题,您需要为每个单元格调用 getMatrix(2, 3, null)。所以也许 defaultValue 应该是一个产生默认值的函数。这是一种方法。查看您对 plunkr 的编辑:
http://plnkr.co/edit/oPCBOcfBiAxwtwNhr6vp?p=preview
// Code goes here
angular.module('MatrixApp', [])
.controller('MatrixCtrl', ['$scope',
function($scope) {
function getMatrix(rows, cols, defaultValueFn){
var arr = new Array(rows);
for (var i = 0; i < rows; i++) {
arr[i] = new Array(cols);
for (var j = 0; j < cols ; j++) {
if(defaultValueFn !== null){
arr[i][j] = defaultValueFn();
}
else{
arr[i][j] = {"value":i+"-"+j};
}
};
};
return arr;
}
var defaultX = 3;
var defaultY = 2;
var defaultVal = null;
$scope.matrixDefaultFn = function() {
return getMatrix(defaultX, defaultY, defaultVal)
}
$scope.data = getMatrix(3,3, $scope.matrixDefaultFn);
}
]);