[英]Requesting data from factory and returning data back to same factory for sharing between controllers
如何在同一工厂中存储和请求数据?
使用AngularJS,我创建了一个名为Products
的factory
app.factory('Products', function($http, ENV){
var Products = {};
Products.details =
{
//grabs the most current endpoint and creates a session of that data
current: {},
getProduct: function($scope, productId) {
return $http.get(ENV.apiEndpoint + '/v2/listings/' + productId + '.json')
.success(function(data){
return data;
})
.error(function(data, status){
console.log('error:' + status);
});
}
}
return Products;
});
该产品数据是从名为MainCtrl
的父控制器中提取的:
.controller('MainCtrl', function($scope, Products) {
$scope.product = Product.details.current;
var handleProductSuccess = function (data) {
//stores the data for the current controller but also sends the data back to factory
$scope.product = data;
};
//on click of a product from view
Products.details.getProduct($scope, $scope.productId).success(handleProductSuccess);
}
成功从api请求数据后,我想将其保存回Product.details.current
对象中的工厂。
这是返回json的一些示例:
{
"_id": "53e82f1d702724156ca806b0",
"index": 0,
"guid": "dd3b8081-867e-4908-90e7-70f5d6f32203",
"isActive": false,
"balance": "$2,233.42",
"picture": "http://placehold.it/32x32",
"age": 33,
"eyeColor": "green",
"name": "Deirdre Floyd",
"gender": "female",
"company": "KAGGLE",
"email": "deirdrefloyd@kaggle.com",
"phone": "+1 (842) 451-3828",
"address": "701 Lois Avenue, Rew, California, 4370"
}
最后,这个Product.details.current
本质上是一个“ session(?)”数据集。 该数据可以在应用程序的多个作用域,指令和状态之间传递。 通过创建一个空间来请求数据并存储要处理的数据会话,我认为这是一种非常小的方法。 不幸的是,我的逻辑/语法不允许我正确执行此操作。
您能以适当的逻辑和语法帮助我吗?
您可以直接从getProducts函数更新Products.details.current。 如果可以从应用程序中的不同位置调用getProduct,并且您希望在控制器中保持信息同步,则可以使用$ watch。
app
.factory('Products', function($http, ENV){
var Products = {};
Products.details =
{
//grabs the most current endpoint and creates a session of that data
current: {},
getProduct: function($scope, productId) {
return $http.get(ENV.apiEndpoint + '/v2/listings/' + productId + '.json')
.success(function(data){
Products.details.current = data; // Update
return data;
})
.error(function(data, status){
console.log('error:' + status);
});
}
};
return Products;
})
.controller('MainCtrl', function($scope, Products) {
$scope.product = Products.details.current;
var handleProductSuccess = function (data) { // (not required if you use the watch below)
// stores the data for the current controller
$scope.product = data;
};
//on click of a product from view
Products.details.getProduct($scope, $scope.productId)
.success(handleProductSuccess);
// If another scope can modify Products.details.current and you want to watch for it:
$scope.$watch(
function () { return Products.details.current;},
function (newVal) { $scope.product = newVal; },
true
);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.