我有这样的对象数组:
$scope.rows =
[{
num1: 56,
num2: 78,
num3: 89
}, {
num1: 56,
num2: 78,
num3: 89
}, {
num1: 56,
num2: 78,
num3: 89
}, {
num1: 56,
num2: 78,
num3: 89
}];
使用ng-repeat创建的表:
<div id="structure">
<table border='1|1'>
<tr ng-repeat="item in rows">
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item)">{{item.num1}}</span>
<input ng-show="item.editing" ng-blur="doneEditing(item)" autofocus/>
</td>
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item)">{{item.num2}}</span>
<input ng-show="item.editing" ng-blur="doneEditing(item)" autofocus/>
</td>
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item)">{{item.num3}}</span>
<input ng-show="item.editing" ng-blur="doneEditing(item)" autofocus/>
</td>
</tr>
</table>
</div>
编辑功能:
$scope.editItem = function (item) {
item.editing = true;
};
$scope.doneEditing = function (item) {
item.editing = false;
};
问题是每个对象中的所有键名是否相同,如何双击并更新表值?
答案 0 :(得分:1)
您只需要在inputs
上使用 Angular's ng-model
指令,这样他们就会更新相应的item
,因此每个input
值都会绑定到相应的item
号。
例如,在fisrt列中,您可以这样定义:
<input ng-show="item.editing" ng-blur="doneEditing(item)" ng-model="item.num1" autofocus/>
这应该是你的HTML:
<tr ng-repeat="item in rows">
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item)">{{item.num1}}</span>
<input ng-show="item.editing" ng-blur="doneEditing(item)" ng-model="item.num1" autofocus/>
</td>
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item)">{{item.num2}}</span>
<input ng-show="item.editing" ng-blur="doneEditing(item)" ng-model="item.num2" autofocus/>
</td>
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item)">{{item.num3}}</span>
<input ng-show="item.editing" ng-blur="doneEditing(item)" ng-model="item.num3" autofocus/>
</td>
</tr>
<强>演示:强>
function myCtrl($scope) {
$scope.rows = [{
num1: 56,
num2: 78,
num3: 89
}, {
num1: 56,
num2: 78,
num3: 89
}, {
num1: 56,
num2: 78,
num3: 89
}, {
num1: 56,
num2: 78,
num3: 89
}];
$scope.editItem = function(item) {
item.editing = true;
};
$scope.doneEditing = function(item) {
item.editing = false;
};
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script>
<div ng-app>
<div ng-controller="myCtrl">
<div id="structure">
<table border='1|1'>
<tr ng-repeat="item in rows">
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item)">{{item.num1}}</span>
<input ng-show="item.editing" ng-blur="doneEditing(item)" ng-model="item.num1" autofocus/>
</td>
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item)">{{item.num2}}</span>
<input ng-show="item.editing" ng-blur="doneEditing(item)" ng-model="item.num2" autofocus/>
</td>
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item)">{{item.num3}}</span>
<input ng-show="item.editing" ng-blur="doneEditing(item)" ng-model="item.num3" autofocus/>
</td>
</tr>
</table>
</div>
</div>
</div>
修改强>
要修复您在评论中说明的问题,这是一个更新的演示片段,它考虑了仅影响,点击的列而不是整行。
function myCtrl($scope) {
$scope.editableColumn = 0;
$scope.rows = [{
num1: 56,
num2: 78,
num3: 89
}, {
num1: 56,
num2: 78,
num3: 89
}, {
num1: 56,
num2: 78,
num3: 89
}, {
num1: 56,
num2: 78,
num3: 89
}];
$scope.editItem = function(item, col) {
item.editing = true;
$scope.editableColumn = col;
};
$scope.doneEditing = function(item) {
item.editing = false;
$scope.editableColumn = 0;
};
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.9/angular.min.js"></script>
<div ng-app>
<div ng-controller="myCtrl">
<div id="structure">
<table border='1|1'>
<tr ng-repeat="item in rows">
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item, 1)">{{item.num1}}</span>
<input ng-show="item.editing && editableColumn == 1" ng-blur="doneEditing(item)" ng-model="item.num1"/>
</td>
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item, 2)">{{item.num2}}</span>
<input ng-show="item.editing && editableColumn == 2" ng-blur="doneEditing(item)" ng-model="item.num2"/>
</td>
<td>
<span ng-hide="item.editing" ng-dblclick="editItem(item, 3)">{{item.num3}}</span>
<input ng-show="item.editing && editableColumn == 3" ng-blur="doneEditing(item)" ng-model="item.num3"/>
</td>
</tr>
</table>
</div>
</div>
</div>
我刚在范围中添加了一个editableColumn
变量,该变量将始终使用要编辑的列的编号进行更新。