У меня есть компонент Angular 2, где я хочу получить элемент div <div id ="myId">
по его идентификатору. Я пытаюсь сделать: document.getElementById("myId")
в своем компоненте (TypeScript), но получаю сообщение об ошибке: «не удается найти документ имени». Я вижу, что в других сообщениях мы можем сделать что-то подобное, используя @ViewChild, однако я не вижу, как мы можем использовать это с div, есть идеи?
Angular 2: доступ к элементу из компонента, getDocumentById не работает
comment
Можете ли вы показать свой код
- person Gab   schedule 04.03.2017
Ответы (2)
Вы можете использовать @ViewChild с div, добавив TemplateRef< /а>.
Шаблон
<div id ="myId" #myId>
Компонент
import { Component, ViewChild, ElementRef, AfterViewInit } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements AfterViewInit {
@ViewChild('myId') myId: ElementRef;
constructor() {
}
ngAfterViewInit() {
console.log(this.myId.nativeElement);
}
}
эта запись в блоге автора Kara Эриксон — действительно хорошая книга для знакомства с подходом Angular к подобным вещам.
person
JayChase
schedule
04.03.2017
Что, если
id
генерируется динамически в *ngFor
для каждого элемента?
- person Marcin Kapusta; 14.05.2018
используя свойство index, вы можете добавить индексированную ссылочную переменную шаблона к элементам, созданным с помощью *ngFor
- person user2713706; 25.06.2018
но тогда вам также придется динамически генерировать аннотации @ViewChild(...), что невозможно. Что делать, если вы не знаете длину списка *ngFor?
- person Adam Bajger; 14.12.2018
Добавьте переменную ссылки на шаблон к элементу, к которому вам нужен доступ:
<div #myDiv></div>
И в компоненте:
class MyComponent implements AfterViewInit {
@ViewChild('myDiv') myDiv: ElementRef;
constructor() {}
ngAfterViewInit() {
console.log(this.myDiv);
}
}
person
seidme
schedule
04.03.2017
Что, если
id
генерируется динамически?
- person Marcin Kapusta; 14.05.2018
@MarcinKapusta использовать идентификаторы не рекомендуется, поскольку на такой платформе, как angular, трудно избежать конфликтов имен (если у вас много компонентов). В каком случае id будет генерироваться динамически? Все идентификаторы должны быть уникальными и ожидаемыми.
- person Shachar Har-Shuv; 16.01.2019