【问题标题】:Angular 2: How retrieve the changes that are done to an injected html?Angular 2:如何检索对注入的 html 所做的更改?
【发布时间】:2017-05-20 14:52:17
【问题描述】:

我从我创建的对象中注入了 HTML,而不是使用管道,我绕过了角度安全性来显示输入字段、文本区域等。

我正在注入一个输入字段、一些文本和一个您可以编辑的<p contenteditable="true"> change me </p>

3) 当用户更新内部时如何跟踪变化并将其推回对象?

如果用户更改了[innerHTML]="item.htmldata" 中的 HTML,有没有办法跟踪它?

obj: Array<any> = [
  { htmldata:  '<div> <strong> There should be a input field below </strong> <input type="text" value="search" /></div>' },
  { htmldata:  '<div> <strong> me to, how are you </strong></div>'}
]

我正在运行 ngFor 循环并通过 angular [innerHTML]="item.htmldata" 绑定数据

<div *ngFor="let item of obj" >

 {{item.htmldata | json }}
 <div [innerHTML]="item.htmldata"  | safeHtml></div>
 <br />
 <hr>
</div>


**SafeHTML pipe**
import { Pipe, PipeTransform } from '@angular/core';
import { DomSanitizer, SafeResourceUrl, SafeUrl} from '@angular/platform-browser';


DomSanitizer
@Pipe({name: 'safeHtml'})
export class Safe {
  constructor(private sanitizer: DomSanitizer){}

  transform(style) {
    return this.sanitizer.bypassSecurityTrustHtml(style);
    //return this.sanitizer.bypassSecurityTrustStyle(style);
    // return this.sanitizer.bypassSecurityTrustXxx(style); - see docs
  }
}

Plunker:http://plnkr.co/edit/ADeAEz81a07Cl2yrDGqQ?p=preview

【问题讨论】:

    标签: angularjs object render inject


    【解决方案1】:

    用此代码替换您的sanitizedHtmlProperty

    示例代码

    public get sanitizedHtmlProperty() : SafeHtml {
      return this._sanitizer.bypassSecurityTrustHtml(this._originalHtmlProperty);
    }
    

    Plunker

    编辑

    您可以使用Blurkeyup

    import {Directive, ElementRef, Input, Output, EventEmitter, OnChanges} from "@angular/core";
    
    @Directive({
    selector: '[contenteditableModel]',
    host: {
        '(blur)': 'onEdit()',
        '(keyup)': 'onEdit()'
    }
    })
    
    export class ContentEditableDirective implements OnChanges {
    @Input('contenteditableModel') model: any;
    @Output('contenteditableModelChange') update = new EventEmitter();
    
    constructor(
        private elementRef: ElementRef
    ) {
        console.log('ContentEditableDirective.constructor');
    }
    
    ngOnChanges(changes) {
        console.log('ContentEditableDirective.ngOnChanges');
        console.log(changes);
        if (changes.model.isFirstChange())
            this.refreshView();
    }
    
    onEdit() {
        console.log('ContentEditableDirective.onEdit');
        var value = this.elementRef.nativeElement.innerText
        this.update.emit(value)
    }
    
    private refreshView() {
        console.log('ContentEditableDirective.refreshView');
        this.elementRef.nativeElement.textContent = this.model
    }
    }
    

    Reference

    编辑 2

    这是跟踪更改的代码Plunker

    【讨论】:

    • 当用户更新内部时如何跟踪更改并将其推回对象?
    • 你也有机会得到一个笨蛋吗?
    • @ChrisTarasovs 请检查插件网址
    猜你喜欢
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-06
    • 1970-01-01
    • 2020-10-29
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多