我可以将函数传递给另一个函数调用具有依赖性的函数吗?

时间:2016-09-04 21:32:26

标签: javascript angularjs dependency-injection

标题可能没有意义,但基本上我不喜欢拿这样的物体......

[
    {
        menuItemTitle: 'Edit Page',
        checkPermissions: function($http, $timeout){

            // Do something which uses $http or $timeout

        }
    }
]

我有一个菜单指令,需要循环遍历数组,并且需要检查.checkPermissions是否是函数所需的每个项目,如果它是一个函数,那么它需要调用它,并以某种方式获取传入的所有依赖项和允许它们在函数内部使用,就像Angular在创建控制器,工厂,服务等时所做的那样。

我想这个函数还需要在调用它的上下文中运行,这样原始上下文中的其他变量也可以在"这个"对象,例如。

var siteId = 'google.com'

var menu = [
    {
        menuItemTitle: 'Edit Page',
        checkPermissions: function($http, $timeout){

            if(siteId === 'google.com'){
                $http.get(stuff);
            }

        }
    }
]

我可以在控制器和服务中找到大量关于如何使用DI的文章,但没有关于使用注入器系统来运行这样的传递函数,所以我认为它真的很难?我的JS技能不仅仅是为了理解核心的Angular代码,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

它应该与Angular和第三方库中用于启用DI的函数$injector.invoke的方法相同。

它基本上调用checkPermissions(应该是函数或内联数组注释),其相应的依赖关系为params,可选的参数也可以作为函数的this上下文提供。

var checkPermissionsResult = $injector.invoke(checkPermissions, this);