从数组中删除角度对象 - $$ hashKey?

时间:2016-06-09 18:55:24

标签: arrays angularjs

我有一个对话,将一个Master Carton添加到一个Master Cartons数组中。

转发器显示一个或多个主纸箱:

        <div ng-repeat="carton in dimensionsModalVm.masterCartons">
                    <div class="form-group">
                        <label class="control-label col-md-3">Length</label>
                        <div class="col-md-9">
                            <input name="length" min="0" max="999" class="form-control input-inline input-xs" type="number" placeholder="Enter Length" ng-model="carton.dimensions.length" required /> inches
                        </div>
                    </div>
                    <div class="form-group">
                        <label class="control-label col-md-3">Weight</label>
                        <div class="col-md-9">
                            <input name="weight" min="0" max="999" class="form-control input-inline input-xs" type="number" placeholder="Enter Weight" ng-model="carton.dimensions.weight" required /> pounds
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <button class="btn btn-default" ng-click=" dimensionsModalVm.addMasterCarton()" type="button">Add another master carton</button>

我在第一页上创建了第一个MC,称为

function dimensionsModalInstanceController($http, $uibModal, $uibModalInstance, toastr, cart, masterCarton, CartObservable) {

    vm.addMasterCarton = function () {
        vm.masterCartons.push({
            length: 0,
            weight: 0
        });
    };
    vm.addMasterCarton();

(( 对于它的价值,dimensionModalInstanceController是在前一个模态的控制器中创建的 - 所以dimensionsModalInstanceController是dimensionsModalVm:

function masterCartonModalInstanceController($uibModal, $uibModalInstance, cart) {
    vm.yes = function(size) {
        var modalInstance = $uibModal.open({
            templateUrl: 'dimensionsModalContent',
            controller: 'dimensionsModalInstanceController',
            controllerAs: 'dimensionsModalVm',
            ...

))

要添加另一个MC,按钮只需调用vm.addMasterCarton。

...

现在我希望能够删除MC。我在每个MC的角落添加了一个[X]。

        <div ng-repeat="carton in dimensionsModalVm.masterCartons">
                <button class="btn btn-default pull-right" type="button" ng-click="dimensionsModalVm.deleteMasterCarton(this)">X</button>

    vm.deleteMasterCarton = function (obj) {
        console.log(obj.carton);
        console.log(vm.masterCartons);
    };

我的输出是:

Object {length: 1, weight: 1, $$hashKey: "object:51"}

Object array
[
    {
    $$hashKey: "object:33",
        length: 1,
        weight: 1
    },{

    $$hashKey: "object:51",
        length: 1,
        weight: 1
    }
]

如何告诉它从数组中删除对象?我看到匹配的$$ hashKeys,但我不确定如何处理它们。

我不想发明一个唯一的ID来跟踪它们。

如果我在我的MC转​​发器上使用了跟踪索引,那么当我删除它们时它们会不合适吗?

这篇文章: How do I delete an item or object from an array using ng-click?

建议应该工作:

         var index = vm.masterCartons.indexOf(obj);
         vm.masterCartons.splice(index, 1);

不幸的是,它没有删除正确的。

1 个答案:

答案 0 :(得分:0)

首先。 使用track by ...($ index,id等)总是好主意。您无需担心列表的跟踪和可能的问题。 第二。

更改

dimensionsModalVm.deleteMasterCarton(this)

dimensionsModalVm.deleteMasterCarton(carton)

并使用&#34;&#34;

的索引再试一次