问题
I have this inputs generated dynamically:
<div *ngFor="let cell of column; let i = index;">
<!-- Material design input-->
<md-input id="my-input-{{i}}">
</md-input>
</div>
Please notice id=my-input-{{i}}
I would like to get a reference to the DOM element based on this dynamic id. This input can be 3, 6 or more inputs so I need to access the id dynamically and get a hold to it.
回答1:
The only response is
let elem:Element = document.getElementById("myProgrammaticallyChosenIndex")
No other angular weird ceremony needed
Tested on angular 4+
回答2:
Use ElementRef
class from @angular/core
to get the parent element and then create an HTMLElement
to get its dynamic elements by class name.
Component:
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);
}
}
Working Plunker
Edit: I used jQuery
only for quick demo purpose here. Otherwise, you should not use jQuery
with Angular
.
回答3:
There is a class called ElementRef class
It gives your permit direct access to the current component or directive hosting DOM.
You can use ElementRef.nativeElement
to get a HTML element, then you can access to html element properties to make your modification by using jQuery
or Renderer class provided by Angular 2.
Example with ElementRef
and 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');
}
}
回答4:
You can access the DOM
by the elementRef
.
Inject it through your constructor by
constructor(myElement: ElementRef) { ... }
And access the DOM
element by the nativeElement
property
myElement.nativeElement.select("#blabla")
来源:https://stackoverflow.com/questions/40535014/angular2-how-to-get-reference-of-html-elements-generated-dynamically