Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用对象中的键执行服务功能_Javascript_Angularjs - Fatal编程技术网

Javascript 如何使用对象中的键执行服务功能

Javascript 如何使用对象中的键执行服务功能,javascript,angularjs,Javascript,Angularjs,我有一个数组,其中包含来自不同服务的信息,其中一些可能存在,也可能不存在,并且可以互换 e、 g.$scope.services=[{facebook:data},{twitter:data},{instagram:data}] 然后,我必须通过使用相同约定命名的方法从给定的服务获取数据,例如facebookTimeline.get()或instagramTimeline.get() 如何使其能够基于$scope.services数组中的键值执行这些函数?我考虑过(key in$scope.se

我有一个数组,其中包含来自不同服务的信息,其中一些可能存在,也可能不存在,并且可以互换

e、 g.
$scope.services=[{facebook:data},{twitter:data},{instagram:data}]

然后,我必须通过使用相同约定命名的方法从给定的服务获取数据,例如
facebookTimeline.get()
instagramTimeline.get()

如何使其能够基于
$scope.services
数组中的键值执行这些函数?我考虑过(key in$scope.services)
,但不确定如何使用键作为字符串执行函数。我无法修改对象在
$scope.services
中的格式和存储方式

编辑:代码示例

angular.module('app').controller('TimelineController', ['$scope', 'instagramTimeline','facebookTimeline', 'twitterTimeline', function($scope, instagramTimeline, facebookTimeline, twitterTimeline){

    $scope.services = {facebook: tokenString, instagram: tokenString, twitter: tokenString};

    for(var key in $scope.services){
        //how would i access <key>Timeline service?
        ('key' + 'Timeline').get()
    }


}])

//example factory

.factory('instagramTimeline', [function(){
   var api = {};
   api.data = [1,2,3,4];
   api.get = function(){
       return data;
   }
}]);
angular.module('app').controller('TimelineController',['scope','instagramTimeline','facebook timeline','twitterTimeline',函数('scope,instagramTimeline,facebook timeline,twitterTimeline){
$scope.services={facebook:tokenString,instagram:tokenString,twitter:tokenString};
for(var键在$scope.services中){
//如何访问时间线服务?
('key'+'Timeline').get()
}
}])
//示例工厂
.factory('instagramTimeline',[function(){
var-api={};
api.data=[1,2,3,4];
api.get=函数(){
返回数据;
}
}]);

如果其他人遇到同样的问题,我已经用另一种服务解决了

.factory('apiLayer', ['instagramTimeline', 'facebookTimeline', 'twitterTimeline', function(instagramTimeline, facebookTimeline, twitterTimeline){

    var factory = {};

    factory.instagramTimeline = function(){ return instagramTimeline; }
    factory.facebookTimeline = function(){ return facebookTimeline; };
    factory.twitterTimeline = function(){ return twitterTimeline; };

    return factory;
}]);
并在控制器中使用

for(var key in $scope.services){
    apiLayer[key+'Timeline']().get();
}

创建一个名为“socialTimeline”的第四个工厂,返回以下API(您需要使用facebookTimeline、twitterTimeline和instagramTimeline注入此新工厂服务):

然后打电话给每个人

socialTimeline[key + 'TimelineService' ].get() 

PD:你可以避开新工厂,如果你喜欢的话,只创建对象。你只需要一些与你的其他工厂相关的键值配对就可以得到你想要的

对于(key in$scope.services){$scope.services[key].get();}???$scope.services[key]将只是
data
的值,它只是一个对象,而不是我试图使用的角度服务(因此它没有get()方法),那么角度服务是什么?请编辑您的问题,输入您的代码和您已经尝试过的内容
socialTimeline[key + 'TimelineService' ].get()