我有一个指令:
@Directive({
selector: '[myDirective]'
})
export class MyDirective implements AfterViewInit {
@ViewChild('wrapper') wrapper;
@ViewChild('list') list;
ngAfterViewInit() {
// Both of these are undefined
console.log(wrapper, list);
}
}
需要查询视图中使用的变量。
所以说我在我的某个组件MyComponent
中有这个模板:
<div #wrapper myDirective>
<ul #list></ul>
</div>
它需要找到这些变量,但是指令永远不会像我现在这样做。我猜测为什么会这样,因为指令实际上没有视图,ngAfterViewInit
运行得太早和/或@ViewChild
尝试查找wrapper
和{{1}在错误的地方。
如何确保指令可以找到变量?
答案 0 :(得分:2)
只需将ViewChild
更改为ContentChild
即可。我想它应该有用
export class MyDirective implements AfterViewInit {
@ContentChild('wrapper') wrapper;
@ContentChild('list') list;
ngAfterContentInit() {
console.log(this.wrapper, this.list);
}
}
<强> Plunker Example 强>