angular4 / typescript의 document.getElementById 대체?


89

그래서 저는 연습 작업에서 angular4로 작업하고 있는데 이것은 저에게 새로운 것입니다. 운 좋게도 html 요소와 내가 사용한 값을 얻으려면 <HTMLInputElement> document.getElementById또는 <HTMLSelectElement> document.getElementById

각도에 이것에 대한 대체가 있는지 궁금합니다.


2
왜 getElementById를 사용하지 않습니까?
Suren Srapyan

1
왜 이것을 원합니까?
Léo R.

요소를 얻는 각진 방법이 있는지 궁금합니다.
Nino Gutierrez

답변:


138

을 사용하여 DOM 요소에 태그를 지정한 #someTag다음 @ViewChild('someTag').

전체 예보기 :

import {AfterViewInit, Component, ElementRef, ViewChild} from '@angular/core';

@Component({
    selector: 'app',
    template: `
        <div #myDiv>Some text</div>
    `,
})
export class AppComponent implements AfterViewInit {
    @ViewChild('myDiv') myDiv: ElementRef;

    ngAfterViewInit() {
        console.log(this.myDiv.nativeElement.innerHTML);
    }
}

console.log일부 텍스트 를 인쇄 합니다 .


오류 프로그램 오류 최대 : 수 없습니다 해결 '@ 각도 / 코어 / SRC / 메타 데이터 / 디'오류 : 수 없다 해결 '@ 각도 / 코어 / SRC / 링커 / element_ref'
니노 구티에레즈

2
nvm은 이와 같이 가져 와서 해결됩니다. import {Component, OnInit, ViewChild, ElementRef} from '@ angular / core';
Nino Gutierrez

17
당신이 * ngFor, * ngIf 등 같은 조건 DOM 요소가있는 경우 작동하지 않습니다
라빈 드라 Thorat

Angular 8+에는 ViewChild 데코레이터에 대한 두 개의 인수가 필요합니다 .

조건이 참인 경우에만 #myDiv를 추가하려면 어떻게해야합니까? 예 : ID로 [id] = "isValid? 'myDiv': ''. 감사합니다
daniel8x

77

DOCUMENT 토큰을 생성자에 주입 하고 동일한 기능을 사용할 수 있습니다.

import { Inject }  from '@angular/core';
import { DOCUMENT } from '@angular/common'; 

@Component({...})
export class AppCmp {
   constructor(@Inject(DOCUMENT) document) {
      document.getElementById('el');
   }
}

또는 가져 오려는 요소가 해당 구성 요소에있는 경우 템플릿 참조를 사용할 수 있습니다 .


24

Angular 8 또는 사후 @ViewChild의 경우 읽기 및 정적이라는 두 가지 속성이있는 opts라는 추가 매개 변수가 있으며 읽기는 선택 사항입니다. 다음과 같이 사용할 수 있습니다.

// ...
@ViewChild('mydiv', { static: false }) public mydiv: ElementRef;

constructor() {
// ...
<div #mydiv></div>

참고 : 정적 : Angular 9에서는 더 이상 false가 필요하지 않습니다 ( { static: true }ngOnInit 내에서 해당 변수를 사용하려는 경우).


1
을 사용하여 요소를 동적으로 숨기거나 표시 할 때 작동합니다 *ngIf. 요소를 어떻게 생성하고 있습니까?
Gustavo Santamaría

7
  element: HTMLElement;

  constructor() {}

  fakeClick(){
    this.element = document.getElementById('ButtonX') as HTMLElement;
    this.element.click();
  }

2
이것은 매우 안전하지 않습니다 (Angular Universal에서이 명령을 실행하면 충돌이 발생 함). 다른 옵션을 사용할 수없는 경우에만 사용해야합니다 (요소가 없을 수도 있음을 고려)
Joniras

2
M @ Joniras가 왜 매우 안전하지 않습니까?
Sumi Straessle

6

이 시도:

TypeScript 파일 코드 :

(<HTMLInputElement> document.getElementById ( "name")). value

HTML 코드 :

 <input id = "name"type = "text"#name /> 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.