angular中需要通过插入带有directive的img标签,在html中innerhtml这段标签后directive不触发

发布于 2022-09-06 08:42:56 字数 1476 浏览 12 评论 0

现在有个需求,富文本生成的img标签需要在详情中能点击放大的效果。
我的想法是写一个点击放大的组件,然后在富文本生成img标签的时候插入selector标识,调用放大组件。

问题:

在详情中获取到生成好的img标签通过[innerHtml]插入到页面中。

-通过[innerHtml]插入的标签angular会自动删除所有attribute防止xss攻击,通过DomSanitizer解决了。虽然页面展示了<img appNgzLightbox src="https://unsplash.it/600.jpg?image=251">标签。但是appNgzLightbox这个directive没被触发。直接在页面中加入这个标签是没有问题的

为什么appNgzLightbox这个组件不能被触发,angular为什么无法识别标签中appNgzLightbox呢?是因为通过innerhtml后没有触发检测,angular没法识别这个selector?求大神谢谢了,在线等。。。

ts

import { Component, OnInit, AfterViewInit } from '@angular/core';
import { DomSanitizer } from '@angular/platform-browser';
@Component({
  selector: 'ngz-lightbox',
  templateUrl: './ngz-lightbox.component.html',
  styleUrls: ['./ngz-lightbox.component.scss']
})
export class NgzLightboxComponent implements OnInit, AfterViewInit {
  url: any;
  constructor(private sanitizer: DomSanitizer) {}

  ngOnInit() {
    this.url = this.sanitizer.bypassSecurityTrustHtml(
      '<img  appNgzLightbox src="https://unsplash.it/600.jpg?image=251">'
    );
  }

  ngAfterViewInit() {}
}

html

<span [innerHtml]='url'></span>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

最偏执的依靠 2022-09-13 08:42:56

折中方案:在生成的标签上包裹一层,在包裹的那一层加上指令标签,点击后触发指令获取到点击到的元素,拿到url创建动态组件,实现放大。可能innerHtml插入的标签,ng不会识别任何指令吧。

思考:创建动态组件后,会调用applicationRef.bootstrap来初始化组件,并触发变换检测。(初始化后ng就能识别组件中的指令),是不是可以把动态html扔到一个组件中,然后初始化这个组件,是否能识别动态html中的指令呢。

画中仙 2022-09-13 08:42:56

我认为这是因为框架中的指令,再怎么设定语法怎样,最终在浏览器中展示出来始终还是用的html,所以用innerHtml插入的标签中的自定义指令不会在打包运行的时候被编译,自然不会生效。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文