У меня есть список товаров. Если я нажимаю на один товар, который нужно добавить в базу данных, и снова, если я щелкаю на том же товаре, он должен быть удален из базы данных, я переключаю wishlistFlag на ng-click. Это должно быть хорошо для одного элемента div, для второго элемента div он работает в обратном порядке по отношению к первому элементу div, я имею в виду, если первый продукт добавлен, то, если я нажимаю второй продукт, он должен быть добавлен, но он удаляет первый продукт.

 <div class="hmpal-prprt-post-wdgt hmpal-prprt-wishlist">
    <a href="">
        <span class="prprt-icon"><i class="fa fa-heart" aria-hidden="true" 
            ng-click="WishlistAdd($index,project.propertyId)"></i></span>
        <span>Wishlist</span>
    </a>
 </div>

И внутри кода контроллера здесь,

a.WishlistAdd = function (index,propertyId) {

    a.wishlistFlag = !a.wishlistFlag;

    var data = {
        wishlistFlag:a.wishlistFlag,
        propertyId:propertyId
    };

    e.createWishLists(data).then(function (result) {
        alert("sucesss");
        alert(JSON.stringify(result));
    }, function (error) {
       alert("error");
       alert(JSON.stringify(error));
    });
}

Как я могу реализовать переключатель wishlistFlag для другого продукта.

0
Onkaresh Ghali 12 Дек 2016 в 10:22

3 ответа

Лучший ответ

Поскольку в списке желаний вы хотите выбрать не более одного продукта, вместо флага boolean вы можете использовать идентификатор выбранного продукта (называемый propertyId в вашем коде, если я прав). Переменная selectedProductId, определенная в контроллере, является либо null, если продукт не выбран, либо идентификатором продукта, если он есть.

переключение выполняется путем проверки, совпадает ли текущий выбранный идентификатор с выбранным.

Я предполагаю что

  1. когда wishListFlag === true в отправленных данных, вы хотите добавить продукт идентифицирован propertyId, а в противном случае удалите продукт из базы данных.
  2. Когда вы добавляете продукт, серверная сторона фактически заменяет выбранный продукт, если он существует.

// Is there a selected product ?
var selectedProductId = null;

a.WishlistAdd = function (index, propertyId) {

    selectedProductId = (selectedProductId === propertyId ? null : propertyId);

    var data = {
        wishlistFlag: (selectedProductId !== null),
        propertyId: propertyId
    };

    e.createWishLists(data).then(function (result) {
        alert("sucesss");
        alert(JSON.stringify(result));
    }, function (error) {
       alert("error");
       alert(JSON.stringify(error));
    });
}
1
T.Gounelle 12 Дек 2016 в 11:56

Перед сохранением в базе данных сохраните массив добавленных propertyIds, проверьте, что id находится в массиве, если это так, удалите из базы данных, а массив удалите из базы данных и массива.

    var wishList = [];

    a.WishlistAdd = function (index,propertyId) {


        var data = {
            wishlistFlag: wishList.indexOf(propertyId) === -1,
            propertyId:propertyId
        };

        e.createWishLists(data).then(function (result) {

            //add or remove propertyid from whishList
            if(data.wishlistFlag)
                wishList.push(propertyId);

            else
                wishList.splice(wishList.indexOf(propertyId), 1);

            alert("sucesss");
            alert(JSON.stringify(result));
        }, function (error) {
           alert("error");
           alert(JSON.stringify(error));
        });
    }
0
Azad 12 Дек 2016 в 12:10

Вы можете использовать $ index, чтобы иметь отдельный флаг для каждого из wishList. Здесь вы можете написать свой код как ..

a.wishListFlag[index]

0
Sai 12 Дек 2016 в 09:37