我想将组件的ng-content
的innerText作为一个简单的字符串,以便能够重用它。
我试过这样的事情:
@Component({
selector: 'my-comp',
template: `
<div class="text-container">
<span class="text" [title]="text">{{text}}</span>
</div>
<ng-template #text>
<ng-content></ng-content>
</ng-template>
`
})
export class MyComponent implements AfterViewInit {
@ViewChild('text') text: TemplateRef<string>;
ngAfterViewInit(): void {
console.log(this.text);
}
}
我这样使用它:
<my-com>
My simple string text
</my-com>
目标是将字符串My simple string text
放入变量text
...
有任何建议吗?
THX
答案 0 :(得分:4)
我不认为你想要什么可以工作(见你问题下面的评论)
我的建议是
<ng-template #text>My simple string text</ng-template>
<my-comp [text]="text"></my-comp>
并且像
一样 @Input() text: TemplateRef<string>;
ngAfterViewInit(): void {
console.log('text', this.text);
}
然后你可以使用模板参考来输出它
<ng-container *ngTemplateOutlet="text"></ng-container>
答案 1 :(得分:-2)
最后,我找到了一个与我想做的相对应的解决方案:
<强> Stackblitz sample 强>
app.component.ts
@Component({
selector: 'my-app',
template: `
<div>
<text-ellipsis>My very very very very long text sentence</text-ellipsis>
</div>
`,
styles: [`
div {
width:100px
}
`]
})
export class AppComponent {
}
文本ellipsis.component.ts
@Component({
selector: 'text-ellipsis',
template: `
<div class="text-container">
<span [title]="text.innerText" #text><ng-content></ng-content></span>
</div>
`,
styles: [`
.text-container {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
`]
})
export class TextEllipsisComponent {
}
通过这种方式,我可以显示ng-content
提供的文字并将其设置在title
属性中。