Javascript 覆盖角度定向链接

Javascript 覆盖角度定向链接,javascript,angularjs,Javascript,Angularjs,我的英语知识有限,所以请耐心听我说。我的处境是,我只能修改一个js文件,它包含在所有角度的东西之前。有一个指令导致了问题,但我不能直接修改它。因此,我试图通过将下面的代码段添加到文档就绪块中来覆盖它: app.directive('selectionChange', function($rootScope){ return { priority: 1, terminal: true, link: function(scope, el, attr) {

我的英语知识有限,所以请耐心听我说。我的处境是,我只能修改一个js文件,它包含在所有角度的东西之前。有一个指令导致了问题,但我不能直接修改它。因此,我试图通过将下面的代码段添加到文档就绪块中来覆盖它:

app.directive('selectionChange', function($rootScope){
   return {
      priority: 1,
      terminal: true,
      link: function(scope, el, attr) {
         console.log('works');
      };
   };
});
我可以看到这个指令被添加到invokeQueue的末尾,但它从未被执行过。我怎样才能把这个附加起来?谢谢

更新:

对不起,让我试着澄清一下。问题是,原始指令继续发出,但新附加的指令没有发出(通过使用console.log和alert进行测试)。标记如下所示:

<html>
<head>
...
<script src="[the file I can modify].js"></script>
...
</head>
<body>
...
<script src="angular.js"></script>
<script src="directives.js"></script> // here is where the existing selectionChange directive is defined
...
</body>
</html>

...
...
...
//这里定义了现有的selectionChange指令
...

在文件中,您可以修改并创建新指令的脚本标记(引用/定义),并将该标记放在指令定义后的正文底部。作为最后一个定义的指令,您将确保您的指令是呈现的指令

在该文件中,您可以修改并创建一个带有(引用/定义)的脚本标记到您的新指令,并将该标记放在指令定义后面的正文底部。作为最后一个定义的指令,您将确保您的指令是呈现的指令

在该文件中,您可以修改并创建一个带有(引用/定义)的脚本标记到您的新指令,并将该标记放在指令定义后面的正文底部。作为最后一个定义的指令,您将确保您的指令是呈现的指令

在该文件中,您可以修改并创建一个带有(引用/定义)的脚本标记到您的新指令,并将该标记放在指令定义后面的正文底部。作为最后一个定义的指令,您将确保您的指令是呈现的指令

这里是

在“就绪”状态下执行(例如jQuery
ready
implementation)是正确的。这样,代码将在引导过程之前启动(加载angular.js后,它将通过
ng app
在“就绪”上排队)

bad
指令只是内部包含DDO数组的
bad指令
服务(因为可以有多个同名指令)。它可以装饰,就像其他服务一样

链接功能可以使用
链接
编译
(它可以返回链接)DDO属性定义。第二个覆盖第一个,因此在装饰指令时始终坚持编译

在“就绪”状态下执行(例如jQuery
ready
implementation)是正确的。这样,代码将在引导过程之前启动(加载angular.js后,它将通过
ng app
在“就绪”上排队)

bad
指令只是内部包含DDO数组的
bad指令
服务(因为可以有多个同名指令)。它可以装饰,就像其他服务一样

链接功能可以使用
链接
编译
(它可以返回链接)DDO属性定义。第二个覆盖第一个,因此在装饰指令时始终坚持编译

在“就绪”状态下执行(例如jQuery
ready
implementation)是正确的。这样,代码将在引导过程之前启动(加载angular.js后,它将通过
ng app
在“就绪”上排队)

bad
指令只是内部包含DDO数组的
bad指令
服务(因为可以有多个同名指令)。它可以装饰,就像其他服务一样

链接功能可以使用
链接
编译
(它可以返回链接)DDO属性定义。第二个覆盖第一个,因此在装饰指令时始终坚持编译

在“就绪”状态下执行(例如jQuery
ready
implementation)是正确的。这样,代码将在引导过程之前启动(加载angular.js后,它将通过
ng app
在“就绪”上排队)

bad
指令只是内部包含DDO数组的
bad指令
服务(因为可以有多个同名指令)。它可以装饰,就像其他服务一样


链接功能可以使用
链接
编译
(它可以返回链接)DDO属性定义。第二个覆盖第一个,所以在装饰指令时始终坚持
compile

您可以为此发布任何标记吗?它不应仅在未加载元素的情况下才起作用。能否请您指出您在标记中如何使用该指令?当人们开始询问如何进行更改时,有些可疑,因为他们“无法”编辑项目中的其他文件,尤其是当他们声称这些文件已“损坏”时。如果你不能修复它,你也不能让写它的人修复它,那么如果它是“坏的”,为什么它会被放在第一位呢?我可以理解这种情绪,因为我的细节很少,但为了澄清,我说它是造成问题的,而不是坏的。问题是我需要动态地将新的select元素插入到DOM中,这是这个指令的一个问题,因为它不需要这些额外的select。我只能说,在一家大公司里,有不同的团队,通常工作量很大。通过“常规渠道”为您更改某些内容可能需要数周,甚至数月。您是否可以为此发布任何标记?它不应该只在元素未加载的情况下才工作。请您也说明一下您是如何在标记中使用该指令的吗?当p
$(function () {
  var app = angular.module('app');

  app.config(function ($provide) {
    $provide.decorator('badDirective', function ($delegate) {
      var badDirective = $delegate[0];

      var link = function (scope, element) {
        element.text('good');
      }

      var originalCompile = badDirective.compile || function () {};
      badDirective.compile = function () {
        originalCompile.apply(badDirective, arguments);

        // compile returns link fn, directive 'link' property will be ignored anyway
        return link;
      }

      return $delegate;
    });    
  });
})