Angular: 属性装饰器ViewChild终章
Posted 技术农夫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular: 属性装饰器ViewChild终章相关的知识,希望对你有一定的参考价值。
终
章
01
上节内容
介绍Angular的属性装饰器
meloneat,公众号:GitHub应用指南
中比较完整地介绍了使用方法,继续补充其在组件和指令获取的用法。
02
场景:为了获得子组件对象,往往也会考虑使用@ViewChild来实现。
看下面的实例:
import {AfterViewInit, Component, ElementRef, QueryList, ViewChild, ViewChildren} from '@angular/core';
import {ChildComponent} from './child.component';
({
selector: 'ac',
template: `
<!-- view child for Component -->
<app-child #appChild></app-child>
<app-child></app-child>
`,
styleUrls: ['./app.component.less']
})
export class AppComponent implements AfterViewInit {
/**** 组件 ****/
'appChild') componentChild: ChildComponent; (
// 方法一:通过模板变量名获取
(ChildComponent) componentChildByType: ChildComponent;
// 方法二:直接通过组件类型获取
(ChildComponent) componentChildList: QueryList<ChildComponent>;
// 获取所有的
ngAfterViewInit(): void {
// DOM节点
console.log(this.componentChild);
if (this.componentChildList != null && this.componentChildList.length !== 0) {
this.componentChildList.forEach(elementRef => console.log(elementRef));
}
}
}
其中方法二,就是获取ChildComponent组件就是通过给装饰器传入组件类型( @ViewChild(ChildComponent) )来实现的,而componentChildByType则是那个对象,如果组件ChildComponent有相应的方法,便可以轻松操作子组件的状态。
那么Directive呢?
import {AfterViewInit, Component, Directive, ViewChild} from '@angular/core';
'child-directive'}) ({selector:
class ChildDirective {
}
'someCmp', templateUrl: 'someCmp.html'}) ({selector:
class SomeCmp implements AfterViewInit {
// TODO(issue/24571): remove '!'.
static: false}) child !: ChildDirective; (ChildDirective, {
ngAfterViewInit() {
// child is set
}
}
当然,使用exportAs是甄别具体指令非常有效的方法,它用来定义一个名字,用于在模板中把该指令赋值给一个变量,模板变量的变种。像这样使用:
selector: ,
exportAs: // !!!划重点了
})
class ChildDir {
}
selector: ,
template: `<child-dir #c= ></child-dir>`
})
class MainComponent {
childDir: ChildDir;
// 使用#c 就是这么简单
}
GitHub应用指南专属小程序
专属工程师的服务指南
好文章 点在看
以上是关于Angular: 属性装饰器ViewChild终章的主要内容,如果未能解决你的问题,请参考以下文章
@ViewChild 和 @ContentChild 有啥区别?
vs 代码更漂亮 - 在 @Input() 装饰器之后添加新行