working not html typescript angular

not - Inyectar<input> en innerHTML angular 2



innerhtml angular 5 (3)

cree el archivo sanitizing.ts cuando lo use para enlazar el html interno.

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); } }

Ahora registre este módulo en su 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 { }

ahora use cuando puede enlazar su html por ejemplo. 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>

Estoy tratando de inyectar una etiqueta HTML de entrada con Angular 2, aquí está mi proyecto:

<div [innerHTML]="inputpdf"></div>

El .ts:

export class FaxSendComponent { inputpdf = ''<input type="text" name="fname">''; }

Aquí está el registro de la consola:

ADVERTENCIA: la limpieza del HTML eliminó parte del contenido (consulte http://g.co/ng/security#xss ).

Intento con otra etiqueta html como <h3> y funciona perfectamente.


Debes confiar en el HTML primero antes de inyectarlo. Tienes que usar el DomSanitizer para tal cosa. Un elemento <h3> se considera seguro. Un elemento <input> no lo es.

Cambie su FaxSendComponent a algo como esto:

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){} }

Y haz que tu plantilla permanezca igual que esta:

<div [innerHTML]="inputpdf"></div>

Un pequeño heads-up sin embargo:

ADVERTENCIA: llamar a este método con datos de usuario no confiables expone su aplicación a riesgos de seguridad XSS.

Si planea usar más esta técnica, puede intentar escribir un Pipe para realizar esta tarea.

@Pipe({ name: ''sanitizeHtml'' }) export class SanitizeHtml implements PipeTransform { constructor(private _sanitizer: DomSanitizer){} transform(v: string) : SafeHtml { return this._sanitizer.bypassSecurityTrustHtml(v); } }

Si tiene una canalización como esta, su FaxSendComponent cambiará a esto:

@Component({ selector: ''fax-send'', template: `<div [innerHTML]="inputpdf | sanitizeHtml"></div>` }) export class FaxSendComponent { public inputpdf: string = ''<input type="text" name="fname">''; }


Trate de usar backticks - `- en lugar de las comillas simples - ''-