2016-06-09 125 views
0

我有一个对话框,它将一个主纸箱添加到一个主纸箱阵列中。

中继器显示1个或多个主箱的:

 <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(); 

(( 对于它的价值,dimensionsModalInstanceController是内创建以前的模态控制器在这里 - 所以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); 

不幸的是,它不会删除正确的。

回答

0

首先。 使用track ...($ index,id等)总是个好主意。您无需担心列表中可能存在的问题。其次。

变化

dimensionsModalVm.deleteMasterCarton(this) 

dimensionsModalVm.deleteMasterCarton(carton) 

+0

啊 “指数” 再试一次!纸箱就是它想要的!谢谢。 – DaveC426913

+0

还发现另一个更简单的解决方案,甚至不需要控制器 - 在DOM中正确: DaveC426913