微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Renderer2

如何解决使用 Renderer2

我有一个指令,当你悬停元素时实现一个滑块,如果你在悬停图像时访问这个 site 指令使其他图像绝对到主图像并启用滑动到下一个图像的箭头,唯一的问题是我有一个 appLazyLoadWithLoading 指令,当它们在页面中可见并且不在屏幕外时加载图像,并在加载之前添加加载,我正在寻找一种方法将我的指令添加到创建的 img 元素。

let img = this.renderer2.createElement('img');
this.renderer2.setAttribute(img,"src",this.thumbnailMaker(element.url));
this.renderer2.setAttribute(img,"alt",element.name);
this.renderer2.setAttribute(img,"title",element.name);
this.renderer2.appendChild(this.el.nativeElement.parentElement,img);

通过这种方式添加了 img 元素,但我无法向其中添加我的指令 试过这种方式和 $compile ,但他们没有工作。

this.renderer.setAttribute(img,"appLazyLoadWithLoading","work please!");

解决方法

可以不使用 Renderer2,而是使用 dynamic component loading

基本上,不是创建 img html 元素,而是创建一个包含 img 元素的组件,以及您想要的任何指令,然后动态加载该组件。

这是一个例子StackBlitz

,

在 Angular v12 之前,你不能在 DOM 中动态添加组件。

一个解决方案可以,

  1. 创建一个带有选择器 [appLazyLoadWithLoading] 的组件
  2. 将此组件转换为 Angular Elements。
  3. 现在您可以动态使用转换后的组件。

基本上发生的事情是 Angular Element 帮助将您的组件转换为 Web 组件。因此,当您向 DOM 添加特定选择器时,特定的 Web 组件将启动,您将在 HTML 上看到所需的行为。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。