2016-06-09 124 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