angular - 如何获取角度组件内的所有图像,包括子组件(以及子组件...)中的图像
问题描述
我尝试了不同的 CSS 选择器和方法,比如
var elements = document.querySelectorAll('#container img');
var elements = this.el.nativeElement.querySelectorAll('img');
var elements = this.el.nativeElement.getElementsByTagName('img');
他们都只在父组件中选择。有没有办法实现这一目标?类似于 ::ng-deep 的行为。
只是为了让它更清楚一点,我想为不同的页面部分应用某种加载屏幕。每个部分都是一个角分量,它可以包含其他自由结构的分量。对于第一种方法,我只想为每个图像实现 onload 处理程序。这段代码似乎工作正常,但它只引用组件自己的图像。所以,如果里面有一个带有巨大图像的子组件,我的加载屏幕逻辑就会失败:(
const addOnloadToImages = () => {
const images = this.el.nativeElement.querySelectorAll<HTMLImageElement>('img');
console.log(`${this.sectionId} images: `, images.length);
let imagesLoaded = 0;
if (!images.length) this.domService.sectionImagesLoaded.next(this.sectionId);
images.forEach(image => {
image.onload = (event) => {
imagesLoaded++;
if (imagesLoaded === images.length) this.domService.sectionImagesLoaded.next(this.sectionId);
};
});
}
解决方案
您可以使用ContentChild
. 例如:
@Component({
selector: `my-component`,
template: `
<div #root>
<img src="" />
<parent-1>
<child-with-images></child-with-images>
</parent-1>
</div>
`
})
export class MyComponent implements AfterContentInit {
@ContentChild('root') rootContainer: ElementRef<HTMLDivElement>;
ngAfterContentInit() {
const allImages = this.rootContainer.nativeElement.getElementsByTagName('img');
}
}
推荐阅读
- sapui5 - SAP UIveri5 最小示例
- angular - 在 Angular 中导入“dexie-export-import”时出错
- java - FileUpload,Struts2,FileUploaderInterceptor 中没有文件
- mysql - 'php artisan migrate'时如何修复错误“外键约束形成错误”?
- python - 用随机数填充多个 Nan 值,而不仅仅是一个数字
- android - InternalAppEventsLogger 中的 NoClassDefFoundError
- c# - 调用对话框后任务线程 id 发生变化
- python - 如何缓存烧瓶函数结果
- r - 如何在 r 中为聚合列绘制条形图
- ignite - Ignite 服务器节点内存不足