Доступ к удаленному контенту
У меня есть компонент, который я использую для отображения блока кода, который заключен в компонент
<gs-code> console.log("Asd")</gs-code>
Компонент выглядит следующим образом
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>
Как я могу получить переведенный текст в компонент?
Я попытался использовать contentChild
и #content
как <ng-content #content></ng-content>
. Но они не сработали.
Ответы
Ответ 1
Элемент <ng-content>
никогда не будет добавлен к самому DOM, поэтому добавление переменной шаблона и запрос на него не работают.
Вы можете обернуть <ng-content>
другим элементом и добавить туда переменную шаблона и запросить этот элемент с помощью @ViewChild()
.
Затем вы можете просто получить innerHTML
элемента оболочки
@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`
}
}
См. также Получить компонент child как строку