如何从组件类本身访问组件的"内容"?
我想这样做:
<upper>my text to transform to upper case</upper>
如何像使用@Input
作为属性一样获得组件中的内容或upper标记?
@Component({
selector: 'upper',
template: `<ng-content></ng-content>`
})
export class UpperComponent {
@Input
content: String;
}
PS:我知道我可以使用管道进行大写转换,这只是一个例子,我不想创建一个大写组件,只知道如何使用组件类访问组件的内容。
5条答案
按热度按时间bnl4lu3b1#
如果你想得到一个引用到嵌入内容的组件,你可以用途:
如果 Package
<ng-content>
,则可以访问嵌入的内容,如kgqe7b3p2#
为此,您需要利用
@ContentChild
装饰器。我对您的问题进行了更多的调查,这里不可能使用
@ContentChild
,因为您没有根内部DOM元素。您需要直接利用DOM,下面是一个可行的解决方案:
更多详情请参见此plunkr:https://plnkr.co/edit/KBxWOnyvLovboGWDGfat?p=preview
czq61nw13#
https://angular.io/api/core/ContentChildren
请注意,如果您执行console.log(contentChildren),它将仅对ngAfterContentInit或更高的事件起作用。
goucqfw64#
早上好,
我一直在做一些关于这个主题的研究,因为在我的项目中发生过类似的事情。我发现有两个装饰器可以帮助你解决这个问题:ViewChildren和ContentChildren.主要根据我在网络中发现的区别是ViewChildren访问组件内部,ContentChildren访问DOM或组件本身。
要从ng-content访问upper元素,您必须更改upper元素,使其如下所示:
然后简单地访问内部(在具有ng-content的组件中):
并且为了访问一般的组件(在具有ng-content的组件中):
您从哪里获得信息:https://netbasal.com/understanding-viewchildren-contentchildren-and-querylist-in-angular-896b0c689f6e
ippsafx75#
您还可以使用
TemplateRef
,这是我最后使用的方法,因为我使用了一个服务来初始化组件。英寸
your-component.component.html
英寸
your-component.component.ts
......对我来说,服务就是中间人-- [未显示]......
英寸
modal.component.html
英寸
modal.component.ts
这就是我最终使用
TemplateRef
解决问题的方式,因为ng-content
无法使用,因为服务正在创建模态