Как выполнять манипуляции с DOM в компонентах Angular?

Как нам получить элементы DOM в Angular (версия 2.x и выше)? Основные функции, такие как addClass, removeClass и т. д., недоступны в машинописном тексте, так как же нам выполнять эти манипуляции с DOM в угловых компонентах? Пожалуйста, предложите, если есть. ТИА


person JS dev    schedule 07.11.2016    source источник
comment
Вы можете использовать структурные директивы, стандартные или пользовательские. Например, для добавления и удаления классов вы должны использовать *ngClass angular. io/docs/ts/latest/guide/structural-directives.html   -  person Alexandru Pufan    schedule 07.11.2016
comment
@АлександруПуфан - спасибо   -  person JS dev    schedule 07.11.2016


Ответы (2)


Вы можете получить доступ к своим элементам DOM с помощью декоратора ViewChild следующим образом:

@Component({
    ....
    templateUrl: 'mytemplate.html'
})

export class MyComponent{
  @ViewChild('selector') private someName;
  constructor() {
     //this is your dom
     //this.someName.nativeElement
  }

}

и в вашем классе шаблонов вы должны указать, кто этот селектор

<div #selector> </div>

или вы можете использовать класс ElementRef

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

export class MyComponent  implements  AfterViewInit {

  constructor(protected elementRef: ElementRef) {

  }

  ngAfterViewInit() {
       //you can reach your dom element by using
       //this.elementRef.nativeElement
   }
}

Вы можете свободно использовать сторонние библиотеки, такие как Jquery для addClass, removeClass в машинописном тексте.

person omeralper    schedule 07.11.2016

Основные функции, такие как addClass, removeClass и т. д., недоступны в машинописном тексте.

Они доступны. Все, что можно сделать на JS, можно сделать и на TypeScript. Вы также можете использовать jQuery, хотя его не рекомендуется использовать с Angular2.

Некоторое объяснение, как получить ссылку на элемент angular 2 / typescript: получение элемента в шаблоне

При этом в Angular2 вам следует избегать императивного изменения DOM, а вместо этого использовать привязку со структурными директивами, такими как *ngFor, *ngIf,..., привязку, например [class.class-name']="true", или директивы, такие как ngClass.

Подробнее см. https://angular.io/docs/ts/latest/guide/

person Günter Zöchbauer    schedule 07.11.2016