这是我的代码
<parent my-directive [toHide]="childRef">
<child bottom right #childRef>
<button>Some text </button>
</child >
</parent >
这里我在父元素上有my-directive
,我想访问子节点并对它应用一些样式。
所以在我的指令中,我有以下内容。
export class MyDirective {
@Input("toHide") localRef;
constructor(public element:ElementRef,public renderer:Renderer) {
console.log('Hello MyDirective Directive');
}
ngAfterViewInit() {
console.log("All Transtition set");
console.log(this.localRef);
this.renderer.setElementStyle(this.localRef, 'webkitTransition', 'transform 500ms,top 500ms');
}
正如您所看到的,我正在使用this.renderer
来设置元素的样式,但我得到以下内容。
ERROR Error: Uncaught (in promise): TypeError: el.style is undefined
这方面的任何帮助都是适当的。
答案 0 :(得分:2)
如果<child>
是纯HTML元素(没有组件),那么这应该有用(添加nativeElement
)
this.renderer.setElementStyle(
this.localRef.nativeElement, 'webkitTransition', 'transform 500ms,top 500ms');
如果<child>
是Angular组件,则更改此行
@Input("toHide") localRef;
到
@ContentChild('childRef', { read: ElementRef }) localRef;
并删除[toHide] =“childRef”
如果元素带有模板变量
是一个纯HTML元素,读取引用返回ElementRef
,并且可以使用nativeElement
属性访问实际元素。
如果它是组件或托管指令,则读取引用将返回不能用于访问DOM元素的组件或指令实例。
@ViewChild(ren)
和@ContentChild(ren)
允许使用read
参数指定从模板变量引用返回的内容,但是从模板中访问模板变量引用并不提供。
但我建议使用
@HostBinding('class.is-transition')
isTransition:boolean false;
在指令中并使用CSS
parent[host-directive] > child {
-webkit-transition: transform 500ms,top 500ms;
}
应用样式。