angular中需要通过插入带有directive的img标签,在html中innerhtml这段标签后directive不触发
现在有个需求,富文本生成的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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
思考:创建动态组件后,会调用
applicationRef.bootstrap
来初始化组件,并触发变换检测。(初始化后ng就能识别组件中的指令),是不是可以把动态html
扔到一个组件中,然后初始化这个组件,是否能识别动态html
中的指令呢。我认为这是因为框架中的指令,再怎么设定语法怎样,最终在浏览器中展示出来始终还是用的html,所以用innerHtml插入的标签中的自定义指令不会在打包运行的时候被编译,自然不会生效。