有没有办法可以使用AngularJs HashKey更新数组中的项目?

时间:2015-03-02 02:49:40

标签: javascript arrays angularjs

我认为这是一个简单的解决方案,但似乎无法实现这一点。

我有一个对象的arrayList,我通过html上的ng-repeat运行。 在每一行我添加一个按钮,调用保存到api服务器。这将从数据库中返回我想在视图中的数组中更新的Id。虽然我似乎无法找到办法。

我无法使用$ index,因为我正在过滤我显示的项目,因此$ index与数组索引不匹配。

控制器:

vm.developmentItems = [];
service.getItems().then(function (results) {
                vm.developmentItems = results;
            });

function saveItem(item) {
     service.updateOrCreate(item)
        .then(function (newId) {
               //Need to update the viewmodel here.
               //Tried sending in the $index but because I'm filtering the $index doesn't match the array.
                item.id = newId; //Tried this

            });
}

HTML:

<tr data-ng-repeat="item in vm.developmentItems | filter: {filter: cat.id}">
<td>{{item.name}}</td>
<td><button type="button" data-ng-click="vm.saveItem(item)"></button></td>
</tr>

所以我认为如果我可以基于跟踪标签更新数组中的项目和角度使用,也许我可以这样做。我可以做一个foreach数组,但是想知道是否有一些使用angular的快速方法,因为我有标签。

1 个答案:

答案 0 :(得分:2)

如果您只想用newId更新现有的developmentItem,那么我只需找到数组中的当前项并使用该索引进行更新。

vm.developmentItems = [];
service.getItems().then(function (results) {
                vm.developmentItems = results;
            });

function saveItem(item) {
     service.updateOrCreate(item)
        .then(function (newId) {
               //Need to update the viewmodel here.
               //Tried sending in the $index but because I'm filtering the $index doesn't match the array.
                var currentIndex = vm.developmentItems.indexOf(item);
                vm.developmentItems[currentIndex].id = newId;
            });
}