2016-01-20 52 views
1

我正在寻找一种方式来改变工厂的回报。 例如,我有一个角度项目,其中包含:一个控制器和一个服务(工厂)。我如何编辑角度的工厂返回数据

控制器为两个Object(“item”和“someItem”)。 该服务公开两种方法(“getIem()”和“getSomeItem()”)。

控制器中的对象从服务接收数据。我想有方法“getItem()”,返回我的json文件中存在的数据作为一个对象,并让我的方法“getSomeItem()”返回一个特定的项目相对于方法的参数。 (在项目中设置“someItem”对象是一个解决方案,但我想在“getSomeItem()”方法中做到这一点,也许我误解了承诺的工作方式,但我认为我可以编辑在我的工厂方法的返回,是一个不好用工厂的)

的plunker是在这里: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 
    } 

}]); 

回答

0

问题就出在你的.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

解释一下:Angular HttpPromise: difference between `success`/`error` methods and `then`'s arguments

+0

'成功'/ '错误' 之间的差异的说明 '然后' 是非常有益的!非常感谢Martin! – vince4128

+0

@ vince4128非常欢迎你:) –