【问题标题】:angular - How to get a reference to each element generated by ngFor when it's createdangular - 如何在创建时获取对 ngFor 生成的每个元素的引用
【发布时间】:2023-03-30 15:17:01
【问题描述】:

在由 ngFor 生成之后,我正在尝试在我的元素上绑定 jQuery UI 功能。因此,我正在寻找的是一个事件或我可以在我的组件中使用的东西,它提供了对创建的新元素的引用。 类似的东西:

sample.component.html

<!-- Parent div is the element I want a reference to each time it's created
     so I can automatically bind the functionality -->

<div *ngFor="let item of items"> 
    <img src="whatever.jpg">
    <p> some other stuff here </p>
<div>

sample.component.ts

/* Something like Angular lifecycle hooks */

onNewElement(el) {
   $(el).draggable();
}

是否有某种我可以使用的回调或在生成每个元素后触发的角度方法?有机会提供样品吗?

【问题讨论】:

标签: angular angular5 ngfor


【解决方案1】:

不要将 JQuery 与 Angular 一起使用。你不应该自己去碰 DOM,你应该让 Angular 去做。

<div *ngFor="let item of items" #elements> 
    <img src="whatever.jpg">
    <p> some other stuff here </p>
<div>

在你的 TS 中:

@ViewChildren('elements') els: QueryList<any>;

通过这个元素列表,您可以获得任何元素的引用。

例如,获得第一个:

const first = this.els.first;

这将为您提供可以使用渲染器操作的元素:

constructor(private renderer: Renderer2) {}

(请注意,您需要加载视图才能访问子视图,这意味着最后一个可用的钩子是AfterViewInit

【讨论】:

  • 非常感谢!顺便说一句,我已经看到很多人不鼓励使用 jQuery,但它的功能在我的项目中是至关重要的。您是否知道可以提供这种功能的其他模块,无论是否有角原生?
  • 如果你提到一个元素的可拖动性,知道this is native to HTML5,所以你真的不需要JQuery!
【解决方案2】:

试试这个? span 不会产生任何 CSS 问题。

   <div *ngFor="let item of items"> 
      <span class="draggable">
        <img src="whatever.jpg">
        <p> some other stuff here </p>
      </span>
    <div>

【讨论】:

  • 这不仅没有回答问题,而且为什么不简单地将类放在 div 上?
  • 这样你就不能提供一些需要在初始化时动态计算和传递的属性和值。除了 jQuery 方法之外,我还需要动态绑定更多功能。因此,我需要知道@tricheriche 提到的正确方法
猜你喜欢
  • 1970-01-01
  • 2017-08-15
  • 2020-08-02
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
  • 2017-09-27
相关资源
最近更新 更多