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

现在在我的应用程序中,我的Trevor爵士扩展代码仅包含在具有自执行匿名功能的文件中,例如...

(function() {

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

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

        // yadda yadda

        })

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

        // blah blah blah

        })
     }

})()


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

有人有什么想法吗?

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

最佳答案

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


指令,用于DOM操作
服务,该服务返回将使用new运算符调用的单例对象。
工厂,它返回一个单例对象。


它也可能在.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);

09-16 14:42