Angular 2 innerHTML 忽略表单标签
Angular 2 innerHTML ignoring form tags
我正在为 Angular 2 构建一个模式,因为没有像 angular 1.x 这样的本地模式 :( 而且我取得了很好的进展。我已经创建了一个显示和隐藏的模态组件,并为主体模板提供了输入。唯一不起作用的是出于某种原因,表单元素正在从呈现的 html 中删除,我不确定为什么.
我有我的父组件,它的模板中包含这个:
<cmg-modal #modal [body]='modalBody'></cmg-modal>
我在这里添加模态框,为其命名并为正文内容传递一个变量。
在父组件代码中,我们将模态主体设置为 HTML 模板。
private modalBody: any = require('../modal/templates/createProject.html');
在该模板 (createProject.html
) 中,我有以下代码:
<div class='create-project-modal'>
<h2>Create a new project</h2>
<form>
<input type='text' name='projectName' placeholder='Enter a project name'>
</form>
<h3>hello world</h3>
<p>this is annoying</p>
</div>
最后,在模态模板文件中,我将 body 的值绑定到 body 元素的内部HTML。
<section class='body' [innerHTML]='body'></section>
然而,当我加载模式并检查元素时,我只有以下 HTML:
<section class='body' ng-reflect-inner-h-t-m-l='<div class="create-project-modal"> <h2>Create a new project</h2> <h3>hello world</h3> <p>this is annoying</p> </div> '>
<div class='create-project-modal'>
<h2>Create a new project</h2>
<h3>hello world</h3>
<p>this is annoying</p>
</div>
</section>
表格哪里去了!?!
出于安全原因,innerHTML 去除了表单和输入元素。这是为了防止 Web 开发人员使他们的网站容易受到 XSS 和其他黑客攻击。如果您查看控制台,应该有 WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).
您可以研究动态组件加载以实现您的最终目标,但是 Angular 类 人们一直在使用的方法,主要是 DynamicComponentLoader and ComponentResolver,已被弃用。
您可以使用 DomSanitizer 将您的 HTML 标记为可信,这样 innerHTML
就不会删除任何内容。
另见
我正在为 Angular 2 构建一个模式,因为没有像 angular 1.x 这样的本地模式 :( 而且我取得了很好的进展。我已经创建了一个显示和隐藏的模态组件,并为主体模板提供了输入。唯一不起作用的是出于某种原因,表单元素正在从呈现的 html 中删除,我不确定为什么.
我有我的父组件,它的模板中包含这个:
<cmg-modal #modal [body]='modalBody'></cmg-modal>
我在这里添加模态框,为其命名并为正文内容传递一个变量。
在父组件代码中,我们将模态主体设置为 HTML 模板。
private modalBody: any = require('../modal/templates/createProject.html');
在该模板 (createProject.html
) 中,我有以下代码:
<div class='create-project-modal'>
<h2>Create a new project</h2>
<form>
<input type='text' name='projectName' placeholder='Enter a project name'>
</form>
<h3>hello world</h3>
<p>this is annoying</p>
</div>
最后,在模态模板文件中,我将 body 的值绑定到 body 元素的内部HTML。
<section class='body' [innerHTML]='body'></section>
然而,当我加载模式并检查元素时,我只有以下 HTML:
<section class='body' ng-reflect-inner-h-t-m-l='<div class="create-project-modal"> <h2>Create a new project</h2> <h3>hello world</h3> <p>this is annoying</p> </div> '>
<div class='create-project-modal'>
<h2>Create a new project</h2>
<h3>hello world</h3>
<p>this is annoying</p>
</div>
</section>
表格哪里去了!?!
出于安全原因,innerHTML 去除了表单和输入元素。这是为了防止 Web 开发人员使他们的网站容易受到 XSS 和其他黑客攻击。如果您查看控制台,应该有 WARNING: sanitizing HTML stripped some content (see http://g.co/ng/security#xss).
您可以研究动态组件加载以实现您的最终目标,但是 Angular 类 人们一直在使用的方法,主要是 DynamicComponentLoader and ComponentResolver,已被弃用。
您可以使用 DomSanitizer 将您的 HTML 标记为可信,这样 innerHTML
就不会删除任何内容。
另见