gpt4 book ai didi

javascript - 如何从数组中删除动态添加的对象以及与每个对象关联的按钮?

转载 作者:行者123 更新时间:2023-12-03 07:45:11 25 4
gpt4 key购买 nike

我正在使用 Angular 构建一个购物 list 应用程序。我有两个预先创建的列表,每个列表分别包含两个和三个预先创建的项目以用于测试目的。当然,最终将不会有预先创建的项目或列表。一切都由用户动态添加。我能够使用“添加项目”按钮,以便您可以向每个列表添加新项目。

这是一支可以玩的笔 - http://codepen.io/anon/pen/WraZEv

<body ng-controller="notepadController as notepad">
<header ng-repeat="list in notepad.lists">
<div>Delete list</div>
<h1>{{list.name}}</h1>
</header>
<div ng-repeat="list in notepad.lists" class="shoppingList" ng-controller="ItemController as itemCtrl">
<ul>
<li ng-repeat="item in list.items">
<label>
<input type="checkbox" ng-model="item.checked">
{{item.name}}
</label>
<form name="removeItemForm" ng-submit="itemCtrl.removeItem(list)">
<input type="submit" value="Remove Item">
</form>
</li>
</ul>
<form name="itemForm" ng-submit="itemCtrl.addItem(list)">
<input type="text" ng-model="itemCtrl.item.name">
<input type="submit" value="Add Item">
</form>
</div>
</body>

Javascript 是:

(function(){
var app = angular.module('notepadApp', []);

var shoppingLists = [
{
name: 'groceries',
items: [
{
name: 'milk',
checked: false
},
{
name: 'eggs',
checked: false
}
]
},
{
name: 'cvs',
items: [
{
name: 'pills',
checked: false
},
{
name: 'cotton balls',
checked: false
},
{
name: 'cigs',
checked: false
}
]
}
];

app.controller('notepadController', function(){
this.lists = shoppingLists;
});

app.controller('ItemController', function(){
this.item = {};

// add new item to a shopping list
this.addItem = function(list){
list.items.push(this.item);
this.item = {};
};

// remove an item from a shopping list
this.removeItem = function(list){
var listOfItems = [];

var i;

for (i = 0; i < list.items.length; i++){
list.items.splice(list.items[i,1]);
}
};
});
})();

“删除项目”按钮会删除列表中的所有项目,而不是与其关联的项目。我知道为什么要这样做,但我不知道如何获取要删除的项目的索引,并让“删除项目”按钮仅删除该项目。

最佳答案

让我们稍微考虑一下。你有两个 Controller 。一个包含列表,另一个包含项目的逻辑。

首先,如果您想修改list,修改它的函数应该位于list所在的同一个 Controller 中。

目前,由于您设置 Controller 的方式,您在传递整个列表时遇到了困难。我想您已经开始明白这种方法出了什么问题。

让我们从中继器开始

ng-repeat="item in list"

这将为您提供item,这是您想要在函数中传递的内容。

就像访问item以输出其名称一样,您可以使用它来传递到您的removeItem

<form name="removeItemForm" ng-submit="notepad.removeItem(item)">
<input type="submit" value="Remove Item">
</form>

您将希望 removeItem 位于列表所在的同一 Controller 中。 (请注意,我将 itemCtrl.removeItem 更改为 notepad.removeItem

notepadController中:

this.removeItem = function(item){
var index = this.list.indexOf(item);
if (index > -1) {
this.list.splice(index, 1); // remove the item
}
};

ng-repeat 还允许您使用名为 $index 的变量,您也可以使用它来提供要删除的 index来自列表:

ng-submit="notpad.removeItem($index)

然后该方法看起来像

this.removeItem = function(index) {
this.list.splice(index, 1);
}

关于javascript - 如何从数组中删除动态添加的对象以及与每个对象关联的按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35237884/

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