2017-05-08 13 views
-1

私の角度コントローラでは、変数を使用して関数を呼び出す必要があります。問題は、サービス名と関数名の両方が動的に定義されているため、どちらも変数になります。 Angular $インジェクタを使用してAngularサービス名を問題なく取得しています。ただし、関数呼び出しが機能しません:サービスと関数名の両方の変数を使用してJavaScript関数を呼び出す

// serviceTypeName and functionTypeName are from the view 
// vm.initiate() is invoked by ng-click 
// 
// $injector is injected to the controller 


vm.initiate = function(serviceTypeName, functionTypeName) { 
    // e.g., if serviceTypeName is 'abcService' and the functionTypeName is 'foo' 
    // then abcService.foo() is what I hope to get. 
    // abcService.foo() is defined in the abcService. 

    var resourceService = $injector.get(serviceTypeName); 

    // the following works: 
    var data = resourceService.foo(); 


    // the following statements do not work 
    var result = resourceService.functionTypeName(); // does not work 
    var result1 = resourceService.eval(functionTypeName)(); // does not work either 
} 

AngularJS 1.5.xを使用することはできますか?もしそうなら、誰かがこの問題を解決するために私を助けることができますか?

+0

resourceService [functionTypeName](); – epascarello

+0

これは魅力的に機能しました。ありがとう。 – redixint

答えて

-1

は(ブラウザのコンソールで)これを試してみてください:

var p = { myMethod: function(){console.log('called');}, myProp: 'asd' } 

さて、あなたはp['myMethod']()を書く場合は、関数が呼び出さ取得見るであろう。同様に、resourceService[functionTypeName]()を実行すると、関数が呼び出されるはずです。

var result = resourceService[functionTypeName](); //should work 
+0

これは機能しました。ありがとう。 – redixint

+0

@redixint - これはあなたのために働く場合、答えとしてマークすることができます。他のユーザーは、その問題が解決策を得ていることを知ります – Paritosh

関連する問題