I have a componenet which i use to display a block of code which is transcluded in the component
<gs-code> console.log("Asd")</gs-code>
The component looks like this
code.component.ts
@Component({
selector: 'gs-code',
providers: [],
viewProviders: [],
templateUrl: './code.component.html',
styleUrls: ['./code.component.less']
})
export class GsCodeComponent {
@Input() lang: string;
@Input() currentLang: string;
@ContentChild('content') content;
copied(event) {
console.log(event);
}
ngAfterContentInit() {
console.log(this.content, "content");
}
}
code.component.html
<pre class="prettyprint">
<ng-content #content></ng-content>
</pre>
<button class="btn btn-sm" title="Copy to clipboard" (click)="copied(content.innerHtml)"><i class="fa fa-clipboard"></i></button>
How can I get the transcluded text in the component?
I have tried using contentChild and #content as the <ng-content #content></ng-content>. But these have not worked.
The <ng-content> element will never be added to the DOM itself, therefore adding a template variable and querying for it doesn't work.
You can wrap <ng-content> with another element and add the template variable there and query this element using @ViewChild().
Then you can just get the innerHTML of the wrapper element
@Component({
selector: 'item',
template: '<div #wrapper><ng-content></ng-content></div>'})
class Item implements AfterContentInit {
@ViewChild('wrapper') wrapper:ElementRef;
@Input() type:string = "type-goes-here";
ngAfterContentInit() {
console.log(this.wrapper.nativeElement.innerHTML); // or `wrapper.text`
}
}
See also Get component child as string
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With