重写Angular指令link
Override Angular Directive link
我对Angular的了解有限,所以请原谅我。我的情况是,我只能修改一个js文件,它包含在所有Angular的东西之前。有一个指令出现了问题,但是我不能直接修改。因此,我试图通过在文档就绪块中添加下面的代码片段来覆盖它:
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>
这是一个活塞
$(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;
});
});
})
在"就绪"状态下做(例如jQuery ready
实现)是正确的事情。这样,代码将在引导过程之前启动(一旦加载angular.js,它将通过ng-app
在'ready'上排队)。
bad
指令只是badDirective
服务内部包含DDO数组(因为可以有几个具有相同名称的指令)。而且可以像其他服务一样进行装饰。
Link函数可以定义为link
或compile
(它可以返回Link) DDO属性。第二个会覆盖第一个,所以在修饰指令时始终坚持使用compile
。
在文件中,你可以修改创建一个带有(引用/定义)的脚本标签到你的新指令,并将该标签放在正文的底部,就在有问题的指令定义之后。通过最后一个定义,你可以确保你的指令被渲染。
相关文章:
- "ctrl”;在指令中的LINK中未定义
- 放在另一个指令中的指令's的link()方法不呈现
- 指令的link()中的数据绑定工作不正常
- 如何在angular指令的link函数中定义angular指令
- 如何在link中访问angular指令隔离的作用域变量?
- 如何在指令的link函数中对绑定对象做出反应
- 当使用$compile以编程方式创建指令时,如何调用link函数?
- AngularJS指令——在作用域参数改变时重新运行link函数
- Angular没有从指令中调用link函数
- 如何在指令link函数中单元测试Angular的routechangessuccess
- 将函数表达式存储在angularjs指令的link函数中,并通过ng-click使用它
- 重写Angular指令link
- 角指令中link和controller作用域共享的混淆
- angularjs指令中的Link函数不起作用
- 如何从link函数访问与指令关联的控制器实例?
- Angularjs指令在link函数中没有响应事件绑定
- 在{}和link中为angular指令定义独立作用域变量的区别
- 当路由改变时,重新运行所有angular object指令(不仅仅是link函数)
- 如何在指令link中访问ngModel的子引用
- AngularJS:在link方法中添加指令's作用域