创建指令,在使用它的地方之外插入HTML
Create Directive that Inserts HTML Outside of Where it's Used
我已经创建了一个AngularJS指令。这个指令需要插入一个HTML元素作为body
元素的子元素。这个元素需要包含另一个自定义组件,定义为一个指令。
我试过transclude
指令,这是不允许我达到预期的结果;将元素作为body
的直接子元素。我正在考虑的一种方法是,以某种方式从templateUrl
中抓取标记,并在关闭body
标记之前将"倾斜地"注入DOM。
我真的试着对每天使用AngularJS的概念保持开放的态度,这些"东西"让这变得很困难。
在指令的link
函数中,尝试以下操作:
link: function(scope, element, attrs) {
// The template of the widget to be added elsewhere.
// This is different than your directive's own template.
var tpl = '<div>some body widget</div>';
// Compile your template, defining a custom cloneAttachFn
// to attach the element where you want in the DOM.
var appended = $compile(tpl)(scope, function(clonedElement) {
$('body').append(clonedElement);
});
}
这样做的好处是,你附加的模板被编译为与它的"兄弟"指令相同的作用域。你可以在$scope
上设置触发消化循环的属性;从附加的模板访问控制器中定义的作用域方法;以及你期望能够做的所有其他正常指令的事情。
尽管拉伸,这仍然感觉像Angular的方式。也许我错过了什么,但这种方法似乎对我有效。
还-确保将$compile
注入到您的指令中,并确保在作用域销毁时执行清理:
scope.$on('$destroy', function() {
appended.remove();
});
Docs here: https://docs.angularjs.org/api/ng/service/$compile
相关文章:
- Emberjs应用程序加载在除Index之外的所有路由上
- 将样式表插入iframe
- Ckeditor-plugin:插入虚假元素add不情愿<p>标签前后
- 如何动态插入jquery代码
- Regex匹配除“”之外的所有字符;.js”;
- RegExp:匹配Javascript中除regex值之外的所有内容
- 动态插入的表:JQuery未检测到最后一行
- 使用JavaScript动态插入DIV的成本有多高
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 消息显示之外的淘汰验证
- 将对象动态插入到现有对象中
- 如何操作iframe之外的元素
- Grunt-connect在根目录之外提供静态文件
- 将数组中的值插入到表中
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- 我如何在数字插入中使用逗号,这样它就不会'不要破坏我的输入字段
- 使用PHP插入HTML在JavaScript上不起作用
- node.js mysql insert id -我如何在插入查询之外暴露插入id
- 创建指令,在使用它的地方之外插入HTML
- 内容可编辑:将光标移动到插入的html节点(webkit/ie)之外