Angular 指令内部 HTML 重新编译,动态创建绑定属性
angular directive inner html recompilation with creating a bind attribute dynamically
我正在尝试简化下面的代码,该代码位于角度控制器内部,动态添加属性并重新编译指令内部html。
additionalInfo: '=',
此属性启用模板中的部分代码,因此必须在动态创建时重新编译它
$element.attr('additional-info', "'test'");
var template = angular.element('<a></a>').append($element.clone()).html();
$element.replaceWith($compile(template)($scope.$parent));
代码工作正常,我正在尝试将代码提炼到最低限度,有什么想法吗?也许可以更换一些东西看起来更好?
我还有两个选项,它们会产生相同的结果:
var template = angular.element('<a></a>').append($element.clone()).html();
var template = $element.get(0).outerHTML;
var template = $element.html($element.get(0).cloneNode(true));
它们都正常工作,但最后一个实际上是返回一个对象,但这仍然有效?如何?为什么?优点/缺点?
首先,
为什么要重新编译 DOM 中的元素?我问,因为可能有更好的解决方案。
其次,您提出的两种解决方案都不起作用。是的,它们似乎为您提供与显示的结果相同的结果,但是如果您使用双向绑定,您将丢失无法将其恢复。
这样,一旦<div>{{value}}</div>
被解析,它将永远是解析的值<div>SomeValue</div>
。
要完全按原样重新编译代码,您需要预编译 DOM,这仅在指令编译函数中可用。您需要存储未编译的 HTML,并在发生某些事情时更改并重建它。
.directive('someDirective', function() {
return {
compile: function($element, $attrs) {
var originalHtml = $element[0].outerHTML;
return: function(scope, element, attrs) {
// some action occurs
var newElement = angular.element(originalHtml);
element[0].insertBefore(newElement, element[0].parent);
$compile(newElement)(scope);
};
}
}
})
相关文章:
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 在动态创建的元素上获取对特定选择器的引用
- JQuery对动态创建的对象进行选择
- 使用jquery动态创建ul-li
- 从动态创建的html选择中选择所选选项
- 如何在动态创建的节点上绑定函数
- 动态创建OnClick事件Javascript
- 谷歌地图动态创建的标记点击事件使用相同的标记
- 在动态创建的标记上添加事件
- 动态创建一个javascript/jquery多级数组
- 如何动态创建许多Jquery颜色选择器(eyecon)
- 如何为动态创建的文本区域中输入的值更新ng模型
- 对动态创建的元素运行jQuery.ech()
- 使用jQuery访问动态创建的项
- 动态创建的iframe中的window.onerror在lne 0处给出脚本错误
- 当用户点击动态创建的链接时,如何调用JS方法.JQuery,ASP.NET MVC
- 我想将链接关联到动态创建的p元素上的相应文章
- AngularJs从列表中动态创建指令
- 使用javascript动态创建html内容/元素