添加自执行匿名函数以在访问$时扩展AngularJS中的Sir Trevor

时间:2014-01-14 11:25:15

标签: javascript angularjs

我有一个使用AngularJS编写的应用程序(我很新),在我的应用程序中我使用Sir Trevor内容编辑器。我需要扩展Sir Trevor内容编辑器以包含我编写的一些自定义块。一切都很好但是我需要在我的扩展代码中使用角度服务(用$预先修复的东西,例如$ translate)。

现在在我的应用程序中,我的Sir Trevor扩展代码仅包含在具有自执行匿名函数的文件中,如此...

(function() {

    // check SirTrevor exists...
    if(SirTrevor){

        SirTrevor.Blocks.NewBlock = SirTrevor.Block.extend({

        // yadda yadda

        })

        SirTrevor.Blocks.AnotherNewBlock = SirTrevor.Block.extend({

        // blah blah blah

        })
     }

})()

现在,当我尝试将角度方法作为参数传递给函数时,它不会被识别,因为它不存在。因此,我需要将我的自执行匿名函数放在可以访问角度服务的地方。 .directive不合适,因为我不希望在HTML中添加标记或属性,我只希望执行此代码一次。该代码似乎不适合.factory因为我没有返回一个对象而我的代码不是单身,所以.service已经出来了,我不确定我在哪里会调用/调用这个吗?我应该在哪里或如何执行我的代码,以便我可以访问/注入角度服务?

有没有人有任何想法?

BTW:我无法将新代码添加到SirTrevor.js中,因为下次更新依赖项或运行bower install时它将被覆盖。

1 个答案:

答案 0 :(得分:2)

你是完全正确的。这纯粹是为了配置,所以它不适合下面的任何组件。

  • 指令,用于DOM操作
  • Service,返回将使用new运算符调用的单个对象。
  • Factory,返回单个对象。

它可能也适用于.config()块,但我会使用.run()块。请参阅Module documentation

实施例

(function(angular, SirTrevor) {

    angular.module('myApp', [])
        .run(['$http', function($http) {

            // $http is injected by Angular.

            if (SirTrevor) {
                SirTrevor.Blocks.NewBlock = SirTrevor.Block.extend({
                    // Whatever here...
                });

                SirTrevor.Blocks.AnotherNewBlock = SirTrevor.Block.extend({
                    // Whatever here...
                });
            }
        }]);

})(angular, SirTrevor);