2 votes

Comment obtenir tous les éléments par nom de classe dans Angular 8 à partir du fichier typescript ?

J'essaie d'obtenir tous les éléments par nom de classe à partir du modèle HTML, dans le fichier TS. Voici ce que j'ai essayé jusqu'à présent.

 <div class="form-group" >
            <label class="name"  class="col-sm-2 control-label" [attr.for]="'skillName' + i">
              {{ arr[i]}} {{ i }}
            </label>
          </div>

  ngAfterViewInit()
  {
    let el = this.document.getElementsByClassName('name');
    console.log(el)
    console.log("*")
  }

3voto

Muss Aab Points 43

Si vous voulez utiliser le Dom pour accéder à votre élément, vous devez utiliser ElementRef.

    // ...
    constructor(elementRef: ElementRef) {}
    // ...
    const dom: HTMLElement = this.elementRef.nativeElement;
    const elements = dom.querySelectorAll('.name');
    console.log(elements);

Mais gardez à l'esprit que vous devez utiliser cette API en dernier recours lorsqu'un accès direct au DOM est nécessaire. Utilisez plutôt le templating et le data-binding ou ViewChild et ViewChildren fournis par Angular.

2voto

MoxxiManagarm Points 5582

Essayez

const el = document.querySelector('.myclass'); // first
const elArr = document.querySelectorAll('.myclass'); // all

Le . est un sélecteur de classes, voir https://www.w3schools.com/jsref/met_document_queryselector.asp

0voto

Ram Points 346

Vous devez utiliser le décorateur viewChild d'Angular pour accéder au domaine.

Fichier Html

<div class="form-group" >
                <label #labelRef class="name"  class="col-sm-2 control-label" [attr.for]="'skillName' + i">
                  {{ arr[i]}} {{ i }}
                </label>
              </div>

fichier component.ts

export class AppComponent implements AfterViewInit {
      @ViewChild('labelRef ', {static: false}) labelRef : ElementRef;

        ngAfterViewInit() {
        console.log(this.labelRef.nativeElement.innerHTML); 
        this.pRef.nativeElement.innerHTML = "DOM updated successfully!!!"; 
      }
    }

-1voto

Chithambaram N Points 1
<h2 class="example">A heading with class="example"</h2>
<p class="example">A paragraph with class="example".</p>
<h2 class="example">A heading with class="example"</h2>
<p class="example">A paragraph with class="example".</p>
<h2 class="example">A heading with class="example"</h2>
<p class="example">A paragraph with class="example".</p>
<h2 class="example">A heading with class="example"</h2>
<p class="example">A paragraph with class="example".</p>
<h2 class="example">A heading with class="example"</h2>
<p class="example">A paragraph with class="example".</p>
<h2 class="example">A heading with class="example"</h2>
<p class="example">A paragraph with class="example".</p>
<h2 class="example">A heading with class="example"</h2>
<p class="example">A paragraph with class="example".</p>
<p>Click the button to add a background color to the first element in the document with class="example".</p>

<script>
    var els = document.getElementsByClassName("example");

    Array.prototype.forEach.call(els, function(el) {
        // Do stuff here
        el.style.backgroundColor = "red";
    });
</script>

-1voto

Anshuman Jaiswal Points 212

Vous pouvez utiliser ViewChildren comme :

<div class="form-group" >
    <label class="name" #customLabel class="col-sm-2 control-label" [attr.for]="'skillName' + i">
        {{ arr[i]}} {{ i }}
    </label>
</div>

@ViewChildren('customLabel') labels: QueryList<ElementRef>

ngAfterViewInit() {
    this.labels.forEach((label) => {
        console.log(label);
        // do whatever you want
    });
}

Ici est la référence pour ViewChildren

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X