我有一个使用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
时它将被覆盖。
答案 0 :(得分:2)
你是完全正确的。这纯粹是为了配置,所以它不适合下面的任何组件。
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);