我有一个使用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);