基于用户在UI中输入的数字创建动态数组(绑定到网格)
Dynamic array creation (bound to a grid) based on a user entered number in the UI
我在一个有角度的应用程序中输入了员工信息。
得到一个输入类型=接受数字的数字(比如说员工人数)。当用户为ex:3输入一个数字时,UI需要动态地在UI中填充一个由3行组成的表(显然,我们需要在这里重复numberOfEmployees)。每一行都应绑定到一个具有名称的员工对象。
所以,我绑定到UI的json对象看起来是这样的,
{
numberOfEmployees : null,
"employees" : [
{
firstName: "set from view",
lastName: "set from view",
amount: "set from view"
},
{
firstName: "set from view",
lastName: "set from view",
amount: "set from view"
}
]
}
视图中的inputtype=number应绑定到numberOfEmployees。网格应绑定到员工数组。
我想我必须在员工人数上设置一个手表,然后进行推送,拼接到员工数组中。但当你想到这样的事情时,逻辑很快就会变得不稳定
- 用户输入2作为数字,在员工网格中填写数据,然后返回并将数字更改为3或1,现在每次数字更改时都需要调整数组,弄清楚要删除哪个数组项以及在哪里添加新项等
如何以一种有角度的规定方式优雅地解决这个问题
您在设计中的约束程度如何?通常,当我处理一个需要动态增长的表单时,我会添加一个"添加员工"按钮。它每次单击都会添加一行。通过使网格中的更改更加精细,可以降低复杂性。
当前UI:
假设您一直使用UI,那么您确实可以在控制器中使用$scope.$watch
。
您还可以使用ng-change="updateEmployees()"
将处理程序附加到输入本身
模板:
<input type="number" ng-model="numOfEmployees">
<table ng-controller="EmployeesCtrl">
<tr ng-repeat="employee in employees">
<td><input type="text" ng-model="employee.firstName"></td>
<td><input type="text" ng-model="employee.lastName"></td>
<td><input type="text" ng-model="employee.amount"></td>
</tr>
</table>
控制器:
angular.module('curExample')
.controller('EmployeesCtrl', function () {
$scope.employees = [];
$scope.numOfEmployees = 0;
$scope.addEmployee = function() {
$scope.employees.push({
firstName: "",
lastName: "",
amount: ""
});
};
$scope.removeEmployees = function(start, count) {
if (start > -1) {
$scope.employees.splice(start, count);
}
};
$scope.updateEmployees = function () {
var newNum = $scope.numOfEmployees,
curNum = $scope.employees.length;
if(!newNum || newNum === curNum) return;
if(newNum > curNum) {
for(var i = 0; i < (newNum - curNum); i++) {
$scope.addEmployee();
}
} else {
$scope.removeEmployees(curNum - 1, curNum - newNum);
}
};
$scope.$watch('numOfEmployees', function (newValue) {
$scope.updateEmployees();
});
});
替代UI:
此解决方案类似于以下内容。当我有时间时,我会发布一个JSFiddle
模板:
<table ng-controller="EmployeesCtrl">
<tr ng-repeat="employee in employees">
<td><input type="text" ng-model="employee.firstName"></td>
<td><input type="text" ng-model="employee.lastName"></td>
<td><input type="text" ng-model="employee.amount"></td>
<td><button ng-click="removeEmployee($index)">Remove</button></td>
</tr>
</table>
<button ng-click="addEmployee()">Add Employee</button>
控制器:
angular.module('altExample')
.controller('EmployeesCtrl', function () {
$scope.employees = [];
$scope.addEmployee = function() {
$scope.employees.push({
firstName: "",
lastName: "",
amount: ""
});
};
$scope.removeEmployee = function(index) {
if (index > -1) {
$scope.employees.splice(index, 1);
}
};
});
相关文章:
- 如何根据用户输入的数字动态地向表单添加文本字段
- 如何从动态输入字段添加数字
- Uncaught SyntaxError:在剑道网格中动态生成列时出现意外数字
- 如何通过输入数字值动态添加文本区域输入?AngularJs.
- 在 jQuery 中选择数字动态元素
- 我是否可以动态更改带有数字的图像,然后将其打印为 PDF
- 包含动态数字的变量
- 自动查找数字总和,因为用户输入值是动态的,而不管输入的数量如何.如果用户输入的数字不是,则提醒用户
- 获取每个数字的每个动态文本框的值
- 动态添加要选择的数字
- 使用 jquery 的动态内部文本中的数字总和
- 使用变量中的数字动态选择对象
- 动态地将数字作为属性添加到现有对象
- 当用户在文本框中输入数字时,将动态获得数组元素javascript或PHP
- Javascript:如何动态地将数字添加到变量名称中
- 使用动态添加的输入对数组中的每个数字进行平方
- 基于用户在UI中输入的数字创建动态数组(绑定到网格)
- Angular js创建一个自定义过滤器,返回小于动态数字的所有项
- Javascript根据类名中的数字动态设置宽度
- 根据用户指定的数字动态添加HTML表单字段