如何防止 ng-bind-html 添加结束标记?
How do you prevent ng-bind-html from adding closing tags?
我有两张HTML我需要输出第一个是代表我的header的div的开始标签,第二个是[的结束标签=26=] 表示页脚。在这两者之间,我有我无法控制的动态内容。我希望 headerHTML 包括开头 div 和 CSS class 以及关闭 header div 的页脚中间的所有内容。
<ng-bind-html ng-bind-html="headerHTML" />
<ng-bind-html ng-bind-html="footerHTML" />
所以在渲染之后它应该看起来像:
<div class="myCSSClass">
A bunch of dynamic content created between the two binds
</div>
然而,结果是这样的:
<div class="myCSSClass">
</div>
A bunch of dynamic content created between the two binds
<div>
</div>
问题在于,当 headerHTML 不是内容的一部分时,它会自动添加结束标记。这会导致页面呈现不正确。有没有另一种方法可以在不添加结束标记的情况下注入 HTML 内容?
在幕后,ng-bind-html
指令使用 Node.appendChild
。这意味着它必须附加一个完整的元素。如果 HTML 省略了结束标记,浏览器必须关闭该元素。这就是 DOM 的工作方式。浏览器无法在两个 .appendChild
操作之间拆分开始和结束标记。
做你想做的,使用一个包含内容的组件:
app.component("myComponent", {
bindings: {
headerHtml: '<',
footerHtml: '<',
},
template: `
<div class="myCSSClass">
<div ng-bind-html="$ctrl.headerHtml"></div>
<div ng-transclude></div>
<div ng-bind-html="$ctrl.footerHtml"></div>
</div>
`,
transclude: true
});
用法:
<my-component header-html="headerHTML" footer-html="footerHTML">
This content will be sandwiched between header and footer.
</my-component>
有关详细信息,请参阅
我有两张HTML我需要输出第一个是代表我的header的div的开始标签,第二个是[的结束标签=26=] 表示页脚。在这两者之间,我有我无法控制的动态内容。我希望 headerHTML 包括开头 div 和 CSS class 以及关闭 header div 的页脚中间的所有内容。
<ng-bind-html ng-bind-html="headerHTML" />
<ng-bind-html ng-bind-html="footerHTML" />
所以在渲染之后它应该看起来像:
<div class="myCSSClass">
A bunch of dynamic content created between the two binds
</div>
然而,结果是这样的:
<div class="myCSSClass">
</div>
A bunch of dynamic content created between the two binds
<div>
</div>
问题在于,当 headerHTML 不是内容的一部分时,它会自动添加结束标记。这会导致页面呈现不正确。有没有另一种方法可以在不添加结束标记的情况下注入 HTML 内容?
在幕后,ng-bind-html
指令使用 Node.appendChild
。这意味着它必须附加一个完整的元素。如果 HTML 省略了结束标记,浏览器必须关闭该元素。这就是 DOM 的工作方式。浏览器无法在两个 .appendChild
操作之间拆分开始和结束标记。
做你想做的,使用一个包含内容的组件:
app.component("myComponent", {
bindings: {
headerHtml: '<',
footerHtml: '<',
},
template: `
<div class="myCSSClass">
<div ng-bind-html="$ctrl.headerHtml"></div>
<div ng-transclude></div>
<div ng-bind-html="$ctrl.footerHtml"></div>
</div>
`,
transclude: true
});
用法:
<my-component header-html="headerHTML" footer-html="footerHTML">
This content will be sandwiched between header and footer.
</my-component>
有关详细信息,请参阅