javascript - 我可以将一个函数传递给另一个函数并调用该函数并具有依赖关系吗?

标签 javascript angularjs dependency-injection

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

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

            // Do something which uses $http or $timeout

        }
    }
]

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

我猜该函数还需要在调用它的上下文中运行,以便原始上下文中的其他变量也可在“this”对象上使用,例如

var siteId = 'google.com'

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

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

        }
    }
]

我可以找到大量关于如何在 Controller 和服务中使用 DI 的文章,但没有关于自己使用注入(inject)器系统来运行这样的传递函数的文章,所以我认为这真的很难吗?我的 JS 技能无法延伸到理解核心 Angular 代码,因此我们将不胜感激任何帮助。

最佳答案

它应该使用与 Angular 和第三方库中用于支持 DI 的函数相同的方式,$injector.invoke .

它基本上调用 checkPermissions (应该是一个函数或内联数组注释),并以各自的依赖项作为参数,还可以提供一个可选参数作为 this 上下文功能。

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

关于javascript - 我可以将一个函数传递给另一个函数并调用该函数并具有依赖关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39321684/

相关文章:

javascript - React/Redux 控制功能组件何时渲染

javascript - 发出 AngularJS $http 请求 POST 时出错

javascript - 使用表达式包装函数测试指令

javascript - 如何在javascript中使用单引号和双引号

javascript - 使用 context.putImageData() 仅复制 Canvas 的一部分

javascript - 使用 Angular ng-repeat 获取数组的最后一个索引

c# - 在 .NET Core 中注入(inject) DynamoDBContext 实例的最佳方式

asp.net-mvc - Ninject,如何通过调用 LoggerFactory.CreateLogger 注入(inject)通用 Logger<T>

javascript - 如何正确使用 `$inject `参数?

javascript - jQuery 文档就绪 - 函数调用 : sequential or asynch?