我正在嘗試使用AngularJS創建一個服務,該服務將保存我的網站的購物車內容。然後,我將使用它來確保在所有控制器等中對購物車的引用應該對同一個對象進行同步。使用promise以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