AngularJS - 将HTML元素添加到没有jQuery的指令中的dom
AngularJS - add HTML element to dom in directive without jQuery
我有一个AngularJS指令,我想在其中添加一个svg标签到指令的当前元素。现在我在jQuery的帮助下做到这一点
link: function (scope, iElement, iAttrs) {
var svgTag = $('<svg width="600" height="100" class="svg"></svg>');
$(svgTag).appendTo(iElement[0]);
...
}
然而,我不希望指令依赖于jQuery来完成这个简单的任务。我将如何使用AngularJS手段(或本机JavaScript代码)完成相同的任务。
为什么不尝试简单(但功能强大)的html()
方法:
iElement.html('<svg width="600" height="100" class="svg"></svg>');
或者append
作为替代方案:
iElement.append('<svg width="600" height="100" class="svg"></svg>');
当然,还有更清洁的方式:
var svg = angular.element('<svg width="600" height="100" class="svg"></svg>');
iElement.append(svg);
小提琴:http://jsfiddle.net/cherniv/AgGwK/
在angularJS中,你可以使用angular.element,它是jQuery的精简版。你可以用它做几乎所有的事情,所以你不需要包含jQuery。
所以基本上,你可以将代码重写为这样的内容:
link: function (scope, iElement, iAttrs) {
var svgTag = angular.element('<svg width="600" height="100" class="svg"></svg>');
angular.element(svgTag).appendTo(iElement[0]);
//...
}
你可以使用这样的东西
var el = document.createElement("svg");
el.style.width="600px";
el.style.height="100px";
....
iElement[0].appendChild(el)
如果您的目标元素为空并且仅包含 <svg>
标记,您可以考虑使用 ng-bind-html
,如下所示:
在指令范围变量中声明您的 HTML 标记
link: function (scope, iElement, iAttrs) {
scope.svgTag = '<svg width="600" height="100" class="svg"></svg>';
...
}
然后,在您的指令模板中,只需在要附加 svg 标签的确切位置添加正确的属性:
<!-- start of directive template code -->
...
<!-- end of directive template code -->
<div ng-bind-html="svgTag"></div>
不要忘记包含ngSanitize
,以允许ng-bind-html
自动将 HTML 字符串解析为受信任的 HTML,并避免不安全的代码注入警告。
有关更多详细信息,请参阅官方文档。
相关文章:
- 这段jquery代码在angular指令中不起作用
- 如何在角度指令规范中使用 jasmine 存根 jquery 函数
- 如何摆脱jQuery的增生并以有角度的方式改进我当前的指令
- 如何在事件上对jquery上的ng模型进行指令更新
- jQuery插件作为指令,并在插件上调用公共方法
- 将jQuery插件转换为指令
- 带有选项的 Angular 指令,像 jQuery Widgets 这样的回调
- 将jquery插件转换为指令angular
- 将类添加到指令中的元素,带有角度和不带 jquery
- 使用 jQuery 访问 Angular 指令中的元素
- 指令未被 jQuery 插件正确定位
- AngularJS指令,jQuery类选择器不起作用
- 将 jquery 灯箱包装在可重用的角度指令中
- AngularJS - 将HTML元素添加到没有jQuery的指令中的dom
- 如何将 jQuery 控件包装为角度指令
- 如何在 angularjs 指令中调用非 jquery 对象方法
- 基本 jquery 小提琴到 Angular 指令
- 将jQuery插件转换为AngularJS指令 - 如何应用if/else
- 角度ng-repeat不更新,当使用jQuery内部指令调用Angular 方法时
- 需要帮助实现jquery指令的排序