Angular使用父

时间:2017-09-14 05:28:30

标签: angular angular-directive

这是我的代码

<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

这方面的任何帮助都是适当的。

1 个答案:

答案 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;
}

应用样式。