tablas reactivos formularios example entre elementref comunicacion componentes angular angular2-template angular2-directives

reactivos - ngmodel angular 5



Angular2 Cómo obtener referencia de elementos HTML generados dinámicamente. (4)

Hay una clase llamada clase ElementRef

Le da a su permiso acceso directo al componente o directiva actual que aloja DOM.

Puede usar ElementRef.nativeElement para obtener un elemento HTML, luego puede acceder a las propiedades del elemento html para realizar su modificación utilizando jQuery o la clase Renderer proporcionada por Angular 2.

Ejemplo con ElementRef y Renderer :

import { Directive, ElementRef, Input, Renderer } from ''@angular/core''; @Directive({ selector: ''[myHighlight]'' }) export class HighlightDirective { constructor(el: ElementRef, renderer: Renderer) { renderer.setElementStyle(el.nativeElement, ''backgroundColor'', ''yellow''); } }

Tengo estas entradas generadas dinámicamente:

<div *ngFor="let cell of column; let i = index;"> <!-- Material design input--> <md-input id="my-input-{{i}}"> </md-input> </div>

Por favor note id=my-input-{{i}} Me gustaría obtener una referencia al elemento DOM basado en esta identificación dinámica. Esta entrada puede ser de 3, 6 o más entradas, por lo que necesito acceder a la ID dinámicamente y controlarla.


La única respuesta es

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

Ninguna otra ceremonia extraña angular necesaria

Probado en angular 4+


Podrías acceder al DOM por medio de elementRef.

Inyecte tirar su constructor por.

constructor(myElement: ElementRef) { ... }

Y acceso al elemento DOM por la propiedad nativeElement

elementRef.nativeElement.select("#blabla")


Use la clase ElementRef de @angular/core para obtener el elemento padre y luego cree un HTMLElement para obtener sus elementos dinámicos por nombre de clase.

Componente:

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); } }

Trabajando plunker

Edición: usé jQuery solo para fines de demostración rápida aquí. De lo contrario, no debes usar jQuery con Angular .