Ashok Koyi
Ashok Koyi

Reputation: 5387

Access template reference inside a template element

I'm using a library that expects me to specify body of a directive as a child of template element

<template customDirective>
   <custom-element #lookup></custom-element>
</template>

Is there a way to access custom-element#lookup inside my component.

For eg.,

@Component({
  selector: 'app-test',
  template: `
    <template customDirective>
       <custom-element #lookup></custom-element>
    </template>
  `
})
export class TestComponent {
  @ViewChild('lookup') viewChildRef;
  @ContentChild('lookup') contentChildRef;

  constructor() {
  }

  ngAfterContentInit(): void {
     console.log(this.viewChildRef); // <-- undefined
     console.log(this.contentChildRef); // <-- undefined
  }
}

I'm getting undefined in both cases.

Upvotes: 10

Views: 5910

Answers (2)

yurzui
yurzui

Reputation: 214017

You cannot get reference to component inside template until you don't create embedded view.

Try using setter like:

@ViewChild('lookup') 
set lookUp(ref: any) {
  console.log(ref);
}

Plunker Example

Upvotes: 9

Aleksandr Petrovskij
Aleksandr Petrovskij

Reputation: 1243

Try to look on lookedUpCustomElemRef inside ngAfterViewInit callback.

https://angular.io/docs/ts/latest/api/core/index/ViewChild-decorator.html

Upvotes: 1

Related Questions