将新指令附加到现有指令上
Attach a new Directive to an Existing one
这是我用来创建一个新的SVG
元素的函数:
makeSvg = function (tag, attrs) {
var el = document.createElementNS("http://www.w3.org/2000/svg", tag);
for (var k in attrs)
el.setAttribute(k, attrs[k]);
return el;
}
用法很简单:
var result = makeSvg("my-directive", { "data-attr": "val" });
$compile(result)($scope);
这段代码工作正常,但问题是我想添加另一个指令到产生的指令。result
在compile
之前的值为:
<my-directive data-attr="val"></my-directive>
这是一个SVG元素,所以我不能像处理字符串一样处理它。我想创建如下内容:
<my-directive data-attr="val" another-directive></my-directive>
之后,我将调用compile
来产生所需的结果,但我不知道如何创建指令。
只需在调用makeSvg
时将其与空字符串添加到attrs对象中即可。
请看看下面的演示或在这个文件。
angular.module('demoApp', [])
.directive('myDir', myDirective)
.directive('anotherDirective', anotherDirective)
.controller('MainController', MainController);
function MainController() {
}
function anotherDirective() {
return {
link: function(scope, element) {
console.log('another directive added');
}
}
}
function myDirective($compile) {
return {
restrict: 'E',
replace:true,
link: function(scope, element) {
var result = makeSvg("my-directive", { "data-attr": "val", "another-directive": ""});
var compiled = $compile(result)(scope);
element.replaceWith(compiled);
}
};
function makeSvg(tag, attrs) {
var el = document.createElementNS("http://www.w3.org/2000/svg", tag);
for (var k in attrs)
el.setAttribute(k, attrs[k]);
return el;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="demoApp">
<my-dir></my-dir>
</div>
相关文章:
- AngularJs指令,该指令创建内部有数据对象的新指令
- 新指令导致NG改变两次触发
- 编译指令在指令 AngularJS 中
- 从另一个指令访问指令的作用域变量
- 从子指令调用指令函数不起作用
- 如何从另一个指令访问指令的 DOM 元素
- 从 AngularJS 中的指令添加指令
- 角度引导添加新指令不起作用
- 如何测试定义了父指令的指令
- 从另一个指令调用指令
- 如何在指令定义期间将新指令正确添加到指令中
- 使用其他指令的指令-AngularJS
- 将新指令附加到现有指令上
- 如何创建一个新指令来编译Angularjs中的其他指令属性
- AngularJS指令到指令的通信
- Angularjs指令添加指令作为属性,并动态绑定它们
- Angular中指令对指令通信抛出错误
- AngularJS指令与指令之间的通信抛出控制器未找到的错误
- 执行/渲染来自另一个指令的指令
- 指令生成指令字段动态不编译