Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 添加一个自动执行的匿名函数,在访问AngularJS时扩展Sir Trevor$_Javascript_Angularjs - Fatal编程技术网

Javascript 添加一个自动执行的匿名函数,在访问AngularJS时扩展Sir Trevor$

Javascript 添加一个自动执行的匿名函数,在访问AngularJS时扩展Sir Trevor$,javascript,angularjs,Javascript,Angularjs,我有一个应用程序是用AngularJS编写的(我对AngularJS非常陌生),在我的应用程序中,我使用的是Sir Trevor内容编辑器。我需要扩展Sir Trevor内容编辑器,以包括我编写的一些自定义块。一切都很好,但是我需要在扩展代码中使用angular services(使用$预先固定的东西,例如$translate) 现在,在我的应用程序中,我的Sir Trevor扩展代码只包含在一个文件中,该文件有一个自动执行的匿名函数,如下所示 (function() { // che

我有一个应用程序是用AngularJS编写的(我对AngularJS非常陌生),在我的应用程序中,我使用的是Sir Trevor内容编辑器。我需要扩展Sir Trevor内容编辑器,以包括我编写的一些自定义块。一切都很好,但是我需要在扩展代码中使用angular services(使用$预先固定的东西,例如$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

        })
     }

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

有人有什么想法吗


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

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

  • 指令,用于DOM操作
  • 服务,它返回一个将由
    new
    操作符调用的单例对象
  • 工厂,它返回一个单例对象
它也可以在
.config()
块中工作,但我会使用
.run()
块。看

例子
你说的“角度法”是什么意思前缀为$的东西听起来更像angular Services插件的唯一有效位置是在指令中。如果您只在一个地方使用插件,这并不重要,而且您实际上不需要向HTML添加额外的标记或属性,因为CSS类也可以引用指令。即使您确实需要添加属性,我也不明白为什么会出现问题?您可以使用
.run()
,但我不确定您所说的“它不会被识别”是什么意思,谢谢您的建议。安德烈-我已经更新了问题。zeroflagL-我说的“它不会被识别”是指如果我像这样传递服务(函数($whater){}($whater)当然可以,但是
$whater
从哪里来?您需要以某种方式获得对该服务的引用。或者,这是一个实际的问题,“如何获取对服务的引用”?很好,但是该项失败/中断了我的构建,因为我传递的服务找不到或它还不可用:angular.module('myApp',[])。run(['$translate',function($translate)然而,这在本地工作?没有现成的称为
$translate
的角度服务。您正在使用吗?在这种情况下,您需要将空数组(
.module('myApp',[])
)替换为包含
$translate
服务的模块,即
.module('myApp',['pascalprecht.translate'))
.Strangly当我添加空数组或['pascalprecht.translate']时,它会破坏Trevor爵士的内容编辑器?有多奇怪?你介意发布或提供代码链接吗?或者跳进去,这样我们可以在聊天时讨论它。
(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);