Ale*_*sse 21 html typescript angular
我试图用Angular 2注入一个输入HTML标签,这是我的项目:
<div [innerHTML]="inputpdf"></div>
Run Code Online (Sandbox Code Playgroud)
.ts:
export class FaxSendComponent {
inputpdf = '<input type="text" name="fname">';
}
Run Code Online (Sandbox Code Playgroud)
这是控制台的日志:
警告:清理HTML会删除一些内容(请参阅 http://g.co/ng/security#xss).
我尝试使用其他html标签<h3>,它完美无缺.
Pie*_*Duc 33
HTML在注射之前你应该相信第一个.你必须使用DomSanitizer这样的东西.一个<h3>元素被认为是安全的.一个<input>元素是没有的.
把你FaxSendComponent改成这样的东西:
export class FaxSendComponent {
private _inputpdf: string = '<input type="text" name="fname">';
public get inputpdf() : SafeHtml {
return this._sanitizer.bypassSecurityTrustHtml(this._inputpdf);
}
constructor(private _sanitizer: DomSanitizer){}
}
Run Code Online (Sandbox Code Playgroud)
并让您的模板与此保持一致:
<div [innerHTML]="inputpdf"></div>
Run Code Online (Sandbox Code Playgroud)
虽然有点单挑:
警告:使用不受信任的用户数据调用此方法会使应用程序面临XSS安全风险!
如果您打算更多地使用此技术,您可以尝试编写一个Pipe来完成此任务.
@Pipe({
name: 'sanitizeHtml'
})
export class SanitizeHtml implements PipeTransform {
constructor(private _sanitizer: DomSanitizer){}
transform(v: string) : SafeHtml {
return this._sanitizer.bypassSecurityTrustHtml(v);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您有这样的管道,您FaxSendComponent将改为:
@Component({
selector: 'fax-send',
template: `<div [innerHTML]="inputpdf | sanitizeHtml"></div>`
})
export class FaxSendComponent {
public inputpdf: string = '<input type="text" name="fname">';
}
Run Code Online (Sandbox Code Playgroud)
小智 7
当你将它用于绑定内部html时创建sanitizing.ts文件.
import { Pipe, PipeTransform } from "@angular/core";
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
@Pipe({
name: 'sanitizeHtml'
})
export class SanitizeHtmlPipe implements PipeTransform {
constructor(private _sanitizer:DomSanitizer) {
}
transform(v:string):SafeHtml {
return this._sanitizer.bypassSecurityTrustHtml(v);
}
}
Run Code Online (Sandbox Code Playgroud)
现在将此模块注册到app.module.ts中
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { routes } from './app.routing';
import { SanitizeHtmlPipe } from './product_details/filter';
@NgModule({
declarations: [
SanitizeHtmlPipe
],
imports: [
BrowserModule,
FormsModule,
HttpModule,
BrowserAnimationsModule,
CookieLawModule,
routes
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)
现在使用时,你可以绑定你的HTML,例如.productDetails.html
<section class="multiple-img">
<div class="container" *ngIf="product_details">
<div class="row">
<h1 class="main-titel-text">Detail</h1>
</div>
<div class="row">
<div class="col-md-3 col-sm-3 col-xs-12">
<div class="product-box-div">
<div class="product-img-div">
<img src="{{image_url.product_images}}{{product_details.product_image}}" alt="Product"/>
</div>
<div class="product-name-div">Name:- {{ product_details.product_name }}</div>
<div class="product-name-div">Price:- {{ product_details.product_price }}</div>
<div class="product-name-div">Selling Price:- {{ product_details.product_discount_price }}</div>
<div class="product-name-div" [innerHTML]="product_details.product_description | sanitizeHtml"></div>
</div>
</div>
</div>
</div>
</section>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13972 次 |
| 最近记录: |