如何在Angular js中创建动态工厂?

pashaplus

在我的项目中,我必须使用如下所示的动态工厂名称在angular js中创建动态工厂

  function createDynamicFactory(modId) {
     return myModule.factory(modId + '-existingService', function (existingService) {
        return existingService(modId);
    }); 
}

当我调用此函数时,我想使用动态名称获取新工厂。不幸的是,这是行不通的。我怎样才能做到这一点?以及如何动态注入我的控制器或指令中?

杰里米·里克尼斯

您可以这样注释您的服务生成器。它使用模块和扩展,然后注释对“ echo”服务的依赖关系(只是我定义的示例服务,用于将文本回显并记录到控制台),以便生成的服务可以使用它:

makeService = function(module, identifier) {
    module.factory(identifier+'-service', ['echo', function(echo) {
            return {
                run: function(msg) {
                    return echo.echo(identifier + ": " + msg);
                }
            };
        }]);
    };

然后,您可以进行一些动态服务:

makeService(app, 'ex1');
makeService(app, 'ex2');

最后,有两种注入方式。如果您知道约定,则可以在显示ext1时将其与注释一起传递。否则,只需获取$ injector的实例并以这种方式获取它。

app.controller("myController", ['ex1-service', 
                                '$injector',
                                '$scope',
                                function(service, $injector, $scope) {
    $scope.service1 = service.run('injected.');   
    $scope.service2 = $injector.get('ex2-service').run('dynamically injected');
}]);

这是完整的工作提琴:http : //jsfiddle.net/jeremylikness/QM52v/1/

更新:如果要在模块初始化后动态创建服务,则需要进行一些细微更改。无需尝试注册模块,只需返回一个带注释的数组。第一个参数是依赖项,最后一个是要注册的函数:

makeService = function(identifier) {
    return ['echo', function(echo) {
        console.log("in service factory");
            return {
                run: function(msg) {
                    return echo.echo(identifier + ": " + msg);
                }
            };
        }];
    };

然后,您获得对该数组的引用,并在$ injector上调用实例化以将其与依赖项连接起来:

var fn = makeService('ex2');
$scope.service2 = $injector.instantiate(fn).run('dynamically injected');

这是该版本的小提琴:http : //jsfiddle.net/jeremylikness/G98JD/2/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在D中创建动态库?

来自分类Dev

如何在zend framework 2中创建工厂?

来自分类Dev

如何在Java中动态创建变量?

来自分类Dev

如何在Jade中动态创建行?

来自分类Dev

如何在Erlang中动态创建原子?

来自分类Dev

如何在Angular JS中动态更改类的内容?

来自分类Dev

如何在php中动态创建数组?

来自分类Dev

如何在GWTP中创建动态表

来自分类Dev

如何在angular js中动态构建页面

来自分类Dev

在Angular JS中动态创建路线

来自分类Dev

如何在Angular JS的工厂/服务中使用$ cookie?

来自分类Dev

如何在Angular.JS中创建Javascript节点

来自分类Dev

如何在sails.js中创建动态策略

来自分类Dev

如何在流星中创建动态资产

来自分类Dev

如何在Angular.JS中的$ routeProvider配置内访问工厂数据对象?

来自分类Dev

如何在angular js中动态启用/禁用验证

来自分类Dev

我如何在Vue.js中创建动态表单

来自分类Dev

如何在Angular中动态滚动<textarea>?

来自分类Dev

如何在Angular中创建Getter Setter

来自分类Dev

如何在Angular中创建问题模板

来自分类Dev

如何在angular.js中动态生成列表

来自分类Dev

在Angular JS中动态创建路线

来自分类Dev

如何在Symfony2中创建动态工厂

来自分类Dev

如何在angular js中动态启用/禁用验证

来自分类Dev

如何在Angular JS中使用标题创建动态表

来自分类Dev

如何在JS中创建动态变量?

来自分类Dev

如何在 C++ 中创建自动键值工厂模式?

来自分类Dev

如何在 Angular JS 中创建循环

来自分类Dev

如何在 Azure 数据工厂中创建视图