angular 中对动态生成的html进行监听。

环境

angular8

问题概述:

前端的html代码是后台数据返回的,前端用了

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

去解析,问题为对innerHtml中的代码中的img添加click的点击事件。

解决思路:

  • 开始想着替换img标签,将后台返回来的img全都加上click的点击事件,比如:
<img (click)="test()"

实际测试,发现click事件不生效。

  • 另外一种解决思路
    主要代码如下
    typescript:
  previewVisible = false;
    previewImage: string;
  constructor(private  el: ElementRef, private renderer: Renderer2) {
    }
  /**
     * 用renderer监测图片点击事件,这块代码放进ngOninit()中就行,只要是页面进行点击,就会触发监听
     */
    monitoreByRenderer() {
        this.renderer.listen(this.el.nativeElement, 'click', (event) => {
            if (event.target.tagName === 'IMG') {
                event.stopPropagation();
                this.previewImage = event.target.currentSrc;
                console.log(this.previewImage);
                this.previewVisible = true;
            }
        });
    }

html:

<nz-modal
        [nzVisible]="previewVisible"
        [nzContent]="modalContent"
        [nzFooter]="null"
        [nzMask]="false"
        (nzOnCancel)="previewVisible = false"
        nzWidth="800px">
    <ng-template #modalContent>
        <img [src]="previewImage" [ngStyle]="{ width: '100%' }"/>
    </ng-template>
</nz-modal>

这是用的renderer2的内容,其实他还有很多功能,需要的可以去官网看一下他的api;
简单解释一下业务场景:点击图片,进行图片的放大预览查看,通过上述代码就可以进行实现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容