从Angular JS中的装饰器内部调用工厂服务

时间:2015-06-22 16:02:02

标签: javascript angularjs angularjs-service

使用TextAngular plugin并尝试customize a toolbar,我尝试将自己的服务(LinkService)注入模块,但出现[$injector:unpr] Unknown provider错误

module.config(function($provide, LinkService){
    $provide.decorator('taOptions', ['taRegisterTool', '$delegate', function(taRegisterTool, taOptions){
        // $delegate is the taOptions we are decorating
        // register the tool with textAngular
        taRegisterTool('colourRed', {
            iconclass: "fa fa-square red",
            action: function(){
                this.$editor().wrapSelection('forecolor', 'red');
                LinkService.createLink(/*...*/)
            }
        });


        // add the button to the default toolbar definition
        taOptions.toolbar[1].push('colourRed');
        return taOptions;
    }]);
});

如何将我的服务注入此配置?

1 个答案:

答案 0 :(得分:2)

我们无法将服务注入configuration块。

  

配置块 - 在提供商注册期间执行   和配置阶段。只能注入提供者和常量   到配置块。这是为了防止意外实例化   服务完全配置之前的服务。

     

运行块 - 在创建并使用注入器后执行   启动应用程序。只有实例和常量才可以   注入运行块。这是为了防止进一步的系统   在应用程序运行时配置。

然而,我们可以将类似的逻辑制作成provider。我不确定LinkService的使用情况,但作为提供者存根我可以看到如下内容......

module.provider('LinkProvider', function () {
    var link;
    return {
        createLink: function (value) {
            link = value;
        },
        $get: function () {
            return {
                link: 'http://' + link
            }
        }
    }
});

module.config(function (LinkProvider) {
    LinkProvider.createLink('stackoverflow.com');
});

请参阅博客Differences Between Providers In AngularJS,详细了解提供商