удаление углового объекта из массива - $$ hashKey?

0

У меня есть диалог, который добавляет 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);

К сожалению, он не удаляет правильный.

Теги:
arrays

1 ответ

0
Лучший ответ

Прежде всего. Использование трека по... ($ index, id и т.д.) Всегда хорошая идея. Вам не нужно беспокоиться о отслеживании и возможных проблемах для вашего списка. Во-вторых.

+ Изменить

dimensionsModalVm.deleteMasterCarton(this)

в

dimensionsModalVm.deleteMasterCarton(carton)

и повторите попытку с "указателем"

  • 0
    Ах! коробка это то, что он хочет! Спасибо.
  • 0
    Также найдено другое, более простое решение, которое даже не требует контроллера - делает это правильно в DOM: <button ng-click = "sizesModalVm.masterCartons.splice ($ index, 1)"> X </ button>
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню