Angular2如何获取动态生成的HTML元素的引用

Com*_*ode 25 angular2-directives angular2-template angular

我有动态生成的输入:

  <div *ngFor="let cell of column; let i = index;">
          <!-- Material design input-->
          <md-input id="my-input-{{i}}">
          </md-input>
  </div>
Run Code Online (Sandbox Code Playgroud)

请注意id=my-input-{{i}}我希望基于此动态ID获得对DOM元素的引用.此输入可以是3个,6个或更多输入,因此我需要动态访问id并保持它.

Dav*_* F. 32

唯一的回应是

let elem:Element = document.getElementById("myProgrammaticallyChosenIndex")

没有其他角度怪异的仪式需要

测试角4+

  • 不知道为什么那个仪式的评论让我发笑 (9认同)
  • 只是去评论这个角度有一个奇怪的仪式是有原因的.它并不适用于所有只会发布到网络上的开发人员,但有角度的长期目的是建立一个可以跨设备使用的统一应用开发平台.使用这样的文档函数使得这是不可能的,因为其他平台/目标可能不会以相同的方式实现文档. (3认同)
  • 有趣,但我们离跨平台产品还很远……来自 Google 的 flutter 似乎是他们下一个非常大的跨平台产品。我想我们永远不会得到任何有角度的跨平台。 (2认同)

Sye*_*aqi 10

使用ElementRefclass from @angular/core获取父元素,然后创建一个HTMLElement按类名获取其动态元素.

零件:

declare var $: any; //intentional use of jQuery-not recommended though

@Component({
  selector: 'my-app',
  template: `
    <input type='button' (click)='addDiv()' value='Add New Div' />

    <input type='button' (click)='selectDiv()' value='Select' />
  `
})
export class App {
  constructor(private elRef: ElementRef) {
  }

  addDiv() {
    /*intentional use of jQuery for appending new div
     give a class to your dynamic elements*/

    $('my-app').append("<div class='foo'>Hello I'm Dynamic!</div>");
  }

  selectDiv() {
    //create a new HTMLElement from nativeElement
    var hElement: HTMLElement = this.elRef.nativeElement;

    //now you can simply get your elements with their class name
    var allDivs = hElement.getElementsByClassName('foo');

    //do something with selected elements
    console.log(allDivs);
  }
}
Run Code Online (Sandbox Code Playgroud)

工作的Plunker

编辑:我这里jQuery仅用于快速演示目的.否则,你不应该使用jQueryAngular.

  • 除了使用jQuery从未提及的问题之外,您不应该为不建议做的事情包含代码演示. (7认同)