Javascript 动态调用serviceName.functionName

Javascript 动态调用serviceName.functionName,javascript,angularjs,Javascript,Angularjs,我调用一个函数 getData('serviceName', 'functionName') 这个函数看起来像 function getData(service, functionName){ service.functionName(request, $root.thing).then() } 但我总是得到服务。函数不是函数,我如何正确调用它们 您可以确保将服务作为字符串使用,如下所示。请确保在使用$injector的任何位置都注入它。不确定函数名,因为函数不在同一文件中。如果使

我调用一个函数

getData('serviceName', 'functionName')
这个函数看起来像

function getData(service, functionName){
    service.functionName(request, $root.thing).then()
}
但我总是得到服务。函数不是函数,我如何正确调用它们


您可以确保将服务作为字符串使用,如下所示。请确保在使用$injector的任何位置都注入它。不确定函数名,因为函数不在同一文件中。

如果使用括号表示法,则可以实现所需的功能

function getData(service, functionName){
    service[functionName](request, $root.thing).then()
}

您是否已从服务中返回
functionName
??是
工厂
还是
服务
?@Davide如果您是这样问的,我会传递正确的参数。另外,console.log(服务)和console.log(函数名)为我提供了正确的值。是的,这是一家工厂。什么是
。那么
?这是承诺吗?嗯,你确定从你的服务中返回该功能吗?当您调用
getData
so时,您处于控制器中?如果你能提供一个plunker,我们可以帮助你做得更好。我已经编辑了服务和主控制器部分,我希望它能有所帮助。
myService
是一个字符串。这不是真正的服务。它没有
findData
方法。请提供完整的代码,而不是摘录,这样就可以注意到代码中应该修正的内容。
eval()
永远不是答案,特别是因为该语言用括号支持:
yourService[functionName](…)
是的,你是对的。我的缺点:(但我认为这是将服务用作字符串的正确方法。括号起了作用,但我必须保持服务名称不变。
function getData(service, functionName){
    service[functionName](request, $root.thing).then()
}