详解角如何正确的操作DOM

  

无奈接手了一个旧项目,上一个老哥在角项目中大量使用了JQuery来操作DOM,真的是太不讲究了。那么如何优雅的使用角的方式来操作DOM呢?

  

  

1, ElementRef ——安康;,一个包装一个本地元素的内部视图。

  

在组件的,构造函数中注入ElementRef,可以获取到整个组件元素的包裹。

        @ component ({   选择器:“app-test-page”,   templateUrl:“。/test-page.component.html”,   styleUrls (“。/test-page.component.scss”):   })   出口类TestPageComponent实现alt="详解角如何正确的操作DOM ">

  

ElementRef中的nativeElement即是组件最外层的DOM元素。再通过原生的DOM定位方式,即可获取到指定的选择器元素。

        getDomTest () {   console.dir (this.el.nativeElement.querySelector (' .test-get-dom '));//获取指定的子元素   }      

2, @viewChild (),——安康;您可以使用ViewChild才能得到第一个元素或指令匹配选择器,查看DOM。

  

@viewChild可以获取指定的元素,指定的方式可以是本地变量或者组件类型;

     //HTML   & lt; div类=皌ip-test-wrapper”比;//本地变量绑定按钮按钮   & lt;按钮类=" test-get-dom " # testdom(点击)=癵etDomTest()在测试获取DOM   & lt;/div>//对话框组件   & lt; app-dialog> & lt;/app-dialog>//ts   从“进口{DialogComponent}。/. ./. ./共同/组件/对话框/dialog.component ';         @ component ({   选择器:“app-test-page”,   templateUrl:“。/test-page.component.html”,   styleUrls (“。/test-page.component.scss”):   })   出口类TestPageComponent实现alt="详解角如何正确的操作DOM ">

  

备注:ElementRef或者@viewChild获取元素,一定要在,ngAfterViewInit周期之后再使用。

  

3, @viewChildren,,您可以使用ViewChildren的{@link QueryList}从景观DOM元素或指示。

  

@viewChild会返回符合条件的第一个元素,如果需要获取多个符合条件的元素呢? @viewChildren会返回所有符合条件的元素的列表。指定选择器的方式与@viewChild一致。

     //复制一个元素   & lt; div类=皌ip-test-wrapper”比;   & lt;按钮类=" test-get-dom " # testdom(点击)=癵etDomTest()在测试获取DOM   & lt;/div>   & lt; div类=皌ip-test-wrapper”比;   & lt;按钮类=" test-get-dom " # testdom(点击)=癵etDomTest()在测试获取DOM   & lt;/div>   & lt;/div>   & lt; app-dialog> & lt;/app-dialog>   & lt; app-dialog> & lt;/app-dialog>//ts   从“进口{DialogComponent}。/. ./. ./共同/组件/对话框/dialog.component ';         @ component ({   选择器:“app-test-page”,   templateUrl:“。/test-page.component.html”,   styleUrls (“。/test-page.component.scss”):   })   出口类TestPageComponent实现alt="详解角如何正确的操作DOM ">

  

  

在获取dom之后,如何对dom进行操作呢?原生的domAPI是一种选择,但是角提供了更好的跨平台方式,Renderer2。

  

引入 Renderer2 ,然后在构造中注入。

        进口{组件,alt="详解角如何正确的操作DOM ">

  

  

通过elementRef或者@viewChild @viewChildren获取元素,再通过renderer2提供的API来操作元素,不过记得在不要在ngAfterViewInit周期之前使用。通过角提供的方式,可以满足大部分的操作DOM的需求了。如果有特殊的场景,当然还是原生DOM撸起来呀

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

详解角如何正确的操作DOM