У меня есть диалог, который добавляет Master Carton к массиву Master Cartons.
Повторитель показывает 1 или более 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 на странице init называется
function dimensionsModalInstanceController($http, $uibModal, $uibModalInstance, toastr, cart, masterCarton, CartObservable) {
vm.addMasterCarton = function () {
vm.masterCartons.push({
length: 0,
weight: 0
});
};
vm.addMasterCarton();
((Для чего это стоит, размерыModalInstanceController создается в предыдущем модальном контроллере здесь - так что размерыModalInstanceController - размерыModalVm:
function masterCartonModalInstanceController($uibModal, $uibModalInstance, cart) {
vm.yes = function(size) {
var modalInstance = $uibModal.open({
templateUrl: 'dimensionsModalContent',
controller: 'dimensionsModalInstanceController',
controllerAs: 'dimensionsModalVm',
...
))
Чтобы добавить еще один MC, кнопка просто вызывает vm.addMasterCarton.
...
Теперь я хочу удалить MC. Я добавил [X] в углу каждого MC.
<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, но я не уверен, что с ними делать.
Я не хочу изобретать уникальный идентификатор, чтобы отслеживать их.
Если бы я использовал дорожку по индексу на моем повторителе MC, они бы ушли с места, когда я их удалю?
Эта статья: Как удалить элемент или объект из массива с помощью ng-click?
предполагает, что это должно работать:
var index = vm.masterCartons.indexOf(obj);
vm.masterCartons.splice(index, 1);
К сожалению, он не удаляет правильный.
Прежде всего. Использование трека по... ($ index, id и т.д.) Всегда хорошая идея. Вам не нужно беспокоиться о отслеживании и возможных проблемах для вашего списка. Во-вторых.
+ Изменить
dimensionsModalVm.deleteMasterCarton(this)
в
dimensionsModalVm.deleteMasterCarton(carton)
и повторите попытку с "указателем"