Я пытаюсь создать службу, которая будет содержать содержимое корзины на моем сайте с помощью AngularJS. Затем я использую это, чтобы убедиться, что ссылка на корзину во всех контроллерах и т. Д. Должна быть на том же объекте и синхронизирована.Инициализировать служебные данные с помощью запроса ajax, используя обещание?
Проблема заключается в том, что содержимое корзины должно быть инициализировано с помощью вызова ajax. Мой код ниже не работает, но показывает, что я пытаюсь выполнить. Я хотел бы как-то получить список элементов и вернуться с помощью getItems(), но если список элементов еще не получен, мне нужно сначала его получить и пообещать возврат. Я пытаюсь склонить голову к концепции «обещания», но до сих пор я еще не получил ее полностью.
factory('cartFactory', function ($rootScope, Restangular) {
var cart = $rootScope.cart = {};
return {
getItems: function() {
if (undefined == cart.items) {
return Restangular.oneUrl('my.api.cart.show', Routing.generate('en__RG__my.api.cart.show')).get().then(function($cart){
cart = $rootScope.cart = $cart;
angular.forEach(cart.items, function(value, key){
cart.items[key]['path'] = Routing.generate('en__RG__my.frontend.product.info', {'slug': value.variant.product.slug});
});
return cart.items;
});
} else {
return cart.items
}
},
setItems: function ($items) {
cart.items = $items;
},
removeItem: function ($item) {
cart.splice(cart.indexOf($item), 1);
},
addItem: function ($item) {
cart.items.push($item)
}
}
})
Это работает, большое спасибо Бертран, очень ценю ваш образец кода. – mr1031011