Angular 中的 dom 操作(原生 js)
ngAfterViewInit(){ var boxDom:any=document.getElementById('box'); boxDom.style.color='red'; }
对变量定义数据类型,防止编译报错
Angular 中的 dom 操作(ViewChild)
- 定义模板(模板引用)
<div #myattr></div>
- @ViewChild定义模板引用变量
import { Component ,ViewChild,ElementRef} from '@angular/core'; @ViewChild('myattr',{static:true}) eleRef: ElementRef; ngAfterViewInit(){ let attrEl = this.eleRef.nativeElement; }
myattr要与模板中的 #myattr对应,名字不能出错,eleRef是变量
父子组件中通过 ViewChild 调用子组件
- 调用子组件给子组件定义一个名称
<app-footer #footerChild></app-footer>
- 引入 ViewChild
import { Component, OnInit ,ViewChild} from '@angular/core';
- ViewChild 和刚才的子组件关联起来
@ViewChild('footerChild',{static:true}) footer;
- 调用子组件
run(){ this.footer.footerRun(); }
完整案例
- 模板
<app-header #header></app-header> <div #myBox> 我是一个dom节点 </div> <button (click)="getChildRun()">获取子组件的方法</button>
- 逻辑定义
import { Component, OnInit,ViewChild} from '@angular/core'; @Component({ selector: 'app-news', templateUrl: './news.component.html', styleUrls: ['./news.component.scss'] }) export class NewsComponent implements OnInit { //获取dom节点 @ViewChild('myBox',{static:true}) myBox:any; //获取一个组件 @ViewChild('header',{static:true}) header:any; constructor() { } ngOnInit() { } ngAfterViewInit(): void { console.log(this.myBox.nativeElement); this.myBox.nativeElement.style.width='100px'; this.myBox.nativeElement.style.height='100px'; this.myBox.nativeElement.style.background='red'; console.log(this.myBox.nativeElement.innerHTML); } getChildRun(){ //调用子组件里面的方法 this.header.run(); } }
Angular8 需要添加 {static:boolean}
属性,必填
//获取header组件 @ViewChild('header',{static:true}) header:any;