我正在创建一个具有添加/删除功能的表单。为实现这一目标,我尝试在ng-model
中使用ng-repeat
。这是我的代码的样子。
<button ng-click='add()'>Add more</button>
<div ng-repeat='x in array track by $index'>
<input ng-model='array[$index].name'></input>
<input ng-model='array[$index].phone'></input>
<input ng-model='array[$index].email'></input>
</div>
//angular module
$scope.add = function () {
$scope.array.push(item);
};
但是,所有输入字段都将被同步,并且数组中的所有项目看起来都是一样的,这是我不打算做的。 另外,我在codepen中制作了我的代码示例。
答案 0 :(得分:2)
所以基本上你每次都会向列表推送一个“项目” - 参考,所以你最终得到一个项目的多个引用列表。
您可以执行以下操作:
angular.module('myapp', [])
.controller('Ctrl', ['$scope', '$compile',function ($scope, $compile) {
$scope.array = [];
var item = {
name: '',
phone: '',
email: '',
};
$scope.array.push(item);
$scope.addItem = function () {
$scope.array.push(
{
name : '',
phone: '',
email: '',
}
);
};
}]);
然后它会工作。个人对html的看法。为简单起见,许多人都像这样重复:
<div ng-repeat='x in array'>
<input ng-model='x.name'></input>
<input ng-model='x.phone'></input>
<input ng-model='x.email'></input>
</div>
答案 1 :(得分:1)
将您的javascript更改为:
create or replace function func(dir text, num integer, pos integer=0) returns refcursor as $$
declare
ref refcursor;
begin
open ref for execute
' select * from test '
' order by x ' || case dir when 'F' then 'ASC' when 'B' then 'DESC' end ||
' limit ' || num ||
' offset ' || pos;
return ref;
end;
$$ language plpgsql;
您必须存储每个名称,电子邮件和电话是单独的型号。
之后,当您在数组中添加项目时,请确保重置它们。
同时在html中更改模型的名称。
检查here。
答案 2 :(得分:1)
每次推送item
,您都会推送对同一对象的引用。因此,当在输入字段中进行更改时,您会看到所有数组节点中的更新 - 它们引用相同的item
。
快速解决方法是在$scope.add()
:
$scope.array.push(angular.copy(item));
更好的方法是将item
作为对象,您可以实例化它:
var Item = function (){
return {
name: '',
phone: '',
email: ''
};
};
然后
$scope.array.push(new Item());