проходящие объекты в Angular

0

Я знаю, что прохождение объектов в Angular - это то же самое, что передавать объекты в vanillaJs, что меня толкает, почему моя модель не обновляется.

У меня есть ящики, содержащие пакеты. Учитывая, что packageId, мне нужно найти его, и удалить пакет из него.

    vm.Bins = []; // bins of packages

    vm.debinPackage = function (packageId) {
        var bin = vm.getBin(packageId);
        var packagge = vm.getPackage(packageId, bin.Packages);
        vm.removePackageFromBin(packagge, bin);
    };

    vm.getBin = function (binId){
        return $filter('filter')(vm.Bins, function(bin, index) {
                  return bin.Id == binId;
        })[0];
    }; 

    vm.getPackage = function (packageId, packages) {
        return $filter('filter')(packages, function(packageItem, index) {
             return packageItem.Id == packageId;
        })[0];
    };

    vm.removePackageFromBin = function (packagge, bin) {
        bin = $filter('filter')(bin.Packages, function(packageItem, index) {
            return packageItem.Id != packagge.Id;
        }); 
    };

,

<button ng-click="adminManifestVm.debinPackage(packageId)"></button>

{{ adminManifestVm.Bins }}

Итак, vm.Bins в моем контроллере, и, следовательно, adminManifestVm.Bins, на мой взгляд, не обновляется, чтобы отразить пакет, который был удален из bin.

т.е. эта строка:

vm.removePackageFromBin(packagge, bin);

фактически не приводит к обновленному объекту vm.Bins.

Я думаю, проблема в том, что когда я получаю объект bin, я использую var как держатель:

var bin = vm.getBin(packageId);

и что он каким-то образом отделен от моего объекта vm.Bins.

но я не могу понять, как манипулировать фактическим объектом в vm.Bins.

Я попробовал работать с объектом напрямую, а не через var

    vm.debinPackage = function (packageId) {
        var binId = vm.getBinIdWithPackage(packageId);
        var packagge = vm.getPackage(packageId, vm.getBin(binId).Packages);
        vm.removePackageFromBin(packagge, vm.getBin(binId));
    };

но это не только не работает, но и делает мой код нечитаемым.

Как я могу гарантировать, что объект bin, над которым я работаю, является тем, который в vm.Bin, в отличие от какой-то его копии?

Теги:

1 ответ

1

Вы пытались использовать сплайс, чтобы удалить элемент из массива вместо переназначения массива с фильтрованным списком?

vm.removePackageFromBin = function (package, bin) {
    var idx = bin.indexOf(package);
    bin.splice(idx, 1);
};
  • 0
    Я попробую это. Спасибо.
  • 0
    Но это не решит проблему ...

Ещё вопросы

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