我如何通过 angular 中的工厂编辑数据 return
How can i edit the data return by a factory in angular
我正在寻找一种方法来改变工厂的 return。
例如,我有一个 angular 项目,其中包含:一个控制器和一项服务(工厂)。
控制器作为两个对象("item" 和 "someItem")。
该服务公开了两种方法("getIem()" 和 "getSomeItem()")。
控制器中的对象从服务接收数据。
我想要 "getItem()" 方法 return 将我的 json 文件中的数据作为对象,并让我的方法 "getSomeItem()" return 相对于方法参数的特定项。
(从 "item" 对象在控制器中设置 "someItem" 对象是一个解决方案,但我想在 "getSomeItem()" 方法中这样做,也许我误解了承诺的方式有效,但我认为我可以在我的工厂中编辑方法的 return,这是对工厂的错误使用吗?)
笨蛋来了:https://plnkr.co/edit/YGNy92ewINRSAILs83PS?p=preview
var controllers = angular.module('controllers',[]);
var services = angular.module('services',[]);
var app = angular.module('app',['controllers','services']);
controllers.controller('mainController',['myFactory',function(myFactory){
var vm = this;
//////////////
vm.item = {};
vm.someItem = {};
activate();
function activate(){
myFactory.getItem().then(function(data){
vm.item = data;
return vm.item;
});
myFactory.getSomeItem(0).then(function(data){
vm.someItem = data;
return vm.someItem;
});
}
}]);
services.factory('myFactory',['$http', function($http){
var getItem = function(){
return $http.get('myData.json')
.success(function(data){return data})
.error(function(data){throw new Error(data + status + headers + config)})
};
var getSomeItem = function(item){
return $http.get('myData.json')
.success(function(data){
//I try to return just a specific object
var oneObject = data.data.objet1[item];
return oneObject})
.error(function(data){throw new Error(data + status + headers + config)})
};
return{
getItem : getItem,
getSomeItem : getSomeItem
}
}]);
问题出在您的 .success
和 .error
,如果您将其更改为 .then
它应该可以工作:
.then(
function(data){
//I try to return just a specific object
var oneObject = data.data.objet1[item];
return oneObject
},
function(data){
throw new Error(data + status + headers + config)
}
);
已更新 plunkr:https://plnkr.co/edit/19naxd7wWr9JNuQkbViS?p=preview
此处解释:
我正在寻找一种方法来改变工厂的 return。 例如,我有一个 angular 项目,其中包含:一个控制器和一项服务(工厂)。
控制器作为两个对象("item" 和 "someItem")。 该服务公开了两种方法("getIem()" 和 "getSomeItem()")。
控制器中的对象从服务接收数据。
我想要 "getItem()" 方法 return 将我的 json 文件中的数据作为对象,并让我的方法 "getSomeItem()" return 相对于方法参数的特定项。
(从 "item" 对象在控制器中设置 "someItem" 对象是一个解决方案,但我想在 "getSomeItem()" 方法中这样做,也许我误解了承诺的方式有效,但我认为我可以在我的工厂中编辑方法的 return,这是对工厂的错误使用吗?)
笨蛋来了:https://plnkr.co/edit/YGNy92ewINRSAILs83PS?p=preview
var controllers = angular.module('controllers',[]);
var services = angular.module('services',[]);
var app = angular.module('app',['controllers','services']);
controllers.controller('mainController',['myFactory',function(myFactory){
var vm = this;
//////////////
vm.item = {};
vm.someItem = {};
activate();
function activate(){
myFactory.getItem().then(function(data){
vm.item = data;
return vm.item;
});
myFactory.getSomeItem(0).then(function(data){
vm.someItem = data;
return vm.someItem;
});
}
}]);
services.factory('myFactory',['$http', function($http){
var getItem = function(){
return $http.get('myData.json')
.success(function(data){return data})
.error(function(data){throw new Error(data + status + headers + config)})
};
var getSomeItem = function(item){
return $http.get('myData.json')
.success(function(data){
//I try to return just a specific object
var oneObject = data.data.objet1[item];
return oneObject})
.error(function(data){throw new Error(data + status + headers + config)})
};
return{
getItem : getItem,
getSomeItem : getSomeItem
}
}]);
问题出在您的 .success
和 .error
,如果您将其更改为 .then
它应该可以工作:
.then(
function(data){
//I try to return just a specific object
var oneObject = data.data.objet1[item];
return oneObject
},
function(data){
throw new Error(data + status + headers + config)
}
);
已更新 plunkr:https://plnkr.co/edit/19naxd7wWr9JNuQkbViS?p=preview
此处解释: