gpt4 book ai didi

javascript - 双击 Angular 编辑带有对象数组的表

转载 作者:行者123 更新时间:2023-11-28 15:19:11 25 4
gpt4 key购买 nike

我有这样的对象数组:

$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;
};

问题是每个对象中的所有键名都相同,如何双击并更新表值?

最佳答案

你只需要使用 Angular's ng-model 指令与您的 inputs,因此它们会更新相应的 item,因此每个 input 值都绑定(bind)到其对应的 item 编号。

例如,在第一列中,您可以这样定义它:

<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 变量,该变量将始终使用要编辑的列的编号进行更新。

关于javascript - 双击 Angular 编辑带有对象数组的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46532488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com