Comment评论
对网站内容的反馈、评价和讨论。
何时使用
评论组件可用于对事物的讨论,例如页面、博客文章、问题等等。
import { NzCommentModule } from 'ng-zorro-antd/comment';
代码演示
基本评论
一个基本的评论组件,带有作者、头像、时间和操作。
import { Component } from '@angular/core';
import { formatDistance } from 'date-fns';
@Component({
selector: 'nz-demo-comment-basic',
template: `
<nz-comment nzAuthor="Han Solo" [nzDatetime]="time">
<nz-avatar nz-comment-avatar nzIcon="user" nzSrc="//zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png"></nz-avatar>
<nz-comment-content>
<p>
We supply a series of design principles, practical patterns and high quality design resources (Sketch and Axure), to help people
create their product prototypes beautifully and efficiently.
</p>
</nz-comment-content>
<nz-comment-action>
<i nz-tooltip nzTitle="Like" nz-icon nzType="like" [nzTheme]="likes > 0 ? 'twotone' : 'outline'" (click)="like()"></i>
<span class="count like">{{ likes }}</span>
</nz-comment-action>
<nz-comment-action>
<i nz-tooltip nzTitle="Dislike" nz-icon nzType="dislike" [nzTheme]="dislikes > 0 ? 'twotone' : 'outline'" (click)="dislike()"></i>
<span class="count dislike">{{ dislikes }}</span>
</nz-comment-action>
<nz-comment-action>Reply to</nz-comment-action>
</nz-comment>
`,
styles: [
`
.count {
padding-left: 8px;
cursor: auto;
}
`
]
})
export class NzDemoCommentBasicComponent {
likes = 0;
dislikes = 0;
time = formatDistance(new Date(), new Date());
like(): void {
this.likes = 1;
this.dislikes = 0;
}
dislike(): void {
this.likes = 0;
this.dislikes = 1;
}
}
配合列表组件
配合 nz-list
组件展现评论列表。
import { Component } from '@angular/core';
import { addDays, formatDistance } from 'date-fns';
@Component({
selector: 'nz-demo-comment-list',
template: `
<nz-list [nzDataSource]="data" [nzRenderItem]="item" [nzItemLayout]="'horizontal'">
<ng-template #item let-item>
<nz-comment [nzAuthor]="item.author" [nzDatetime]="item.datetime">
<nz-avatar nz-comment-avatar nzIcon="user" [nzSrc]="item.avatar"></nz-avatar>
<nz-comment-content>
<p>{{ item.content }}</p>
</nz-comment-content>
<nz-comment-action>Reply to</nz-comment-action>
</nz-comment>
</ng-template>
</nz-list>
`
})
export class NzDemoCommentListComponent {
data = [
{
author: 'Han Solo',
avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png',
content:
'We supply a series of design principles, practical patterns and high quality design resources' +
'(Sketch and Axure), to help people create their product prototypes beautifully and efficiently.',
datetime: formatDistance(new Date(), addDays(new Date(), 1))
},
{
author: 'Han Solo',
avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png',
content:
'We supply a series of design principles, practical patterns and high quality design resources' +
'(Sketch and Axure), to help people create their product prototypes beautifully and efficiently.',
datetime: formatDistance(new Date(), addDays(new Date(), 2))
}
];
}
嵌套评论
评论可以嵌套。
import { Component } from '@angular/core';
@Component({
selector: 'nz-demo-comment-nested',
template: `
<ng-template #commentTemplateRef let-comment="comment">
<nz-comment [nzAuthor]="comment.author">
<nz-avatar nz-comment-avatar nzIcon="user" [nzSrc]="comment.avatar"></nz-avatar>
<nz-comment-content>
<p>{{ comment.content }}</p>
</nz-comment-content>
<nz-comment-action>Reply to</nz-comment-action>
<ng-container *ngIf="comment.children && comment.children.length">
<ng-template ngFor let-child [ngForOf]="comment.children">
<ng-template [ngTemplateOutlet]="commentTemplateRef" [ngTemplateOutletContext]="{ comment: child }"> </ng-template>
</ng-template>
</ng-container>
</nz-comment>
</ng-template>
<ng-template [ngTemplateOutlet]="commentTemplateRef" [ngTemplateOutletContext]="{ comment: data }"> </ng-template>
`
})
export class NzDemoCommentNestedComponent {
data = {
author: 'Han Solo',
avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png',
content:
'We supply a series of design principles, practical patterns and high quality design resources' +
'(Sketch and Axure), to help people create their product prototypes beautifully and efficiently.',
children: [
{
author: 'Han Solo',
avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png',
content:
'We supply a series of design principles, practical patterns and high quality design resources' +
'(Sketch and Axure), to help people create their product prototypes beautifully and efficiently.',
children: [
{
author: 'Han Solo',
avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png',
content:
'We supply a series of design principles, practical patterns and high quality design resources' +
'(Sketch and Axure), to help people create their product prototypes beautifully and efficiently.'
},
{
author: 'Han Solo',
avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png',
content:
'We supply a series of design principles, practical patterns and high quality design resources' +
'(Sketch and Axure), to help people create their product prototypes beautifully and efficiently.'
}
]
}
]
};
}
回复框
评论编辑器组件提供了相同样式的封装以支持自定义评论编辑器。
import { Component } from '@angular/core';
import { formatDistance } from 'date-fns';
@Component({
selector: 'nz-demo-comment-editor',
template: `
<nz-list *ngIf="data.length" [nzDataSource]="data" [nzRenderItem]="item" [nzItemLayout]="'horizontal'">
<ng-template #item let-item>
<nz-comment [nzAuthor]="item.author" [nzDatetime]="item.displayTime">
<nz-avatar nz-comment-avatar nzIcon="user" [nzSrc]="item.avatar"></nz-avatar>
<nz-comment-content>
<p>{{ item.content }}</p>
</nz-comment-content>
</nz-comment>
</ng-template>
</nz-list>
<nz-comment>
<nz-avatar nz-comment-avatar nzIcon="user" [nzSrc]="user.avatar"></nz-avatar>
<nz-comment-content>
<nz-form-item>
<textarea [(ngModel)]="inputValue" nz-input rows="4"></textarea>
</nz-form-item>
<nz-form-item>
<button nz-button nzType="primary" [nzLoading]="submitting" [disabled]="!inputValue" (click)="handleSubmit()">
Add Comment
</button>
</nz-form-item>
</nz-comment-content>
</nz-comment>
`
})
export class NzDemoCommentEditorComponent {
// tslint:disable-next-line:no-any
data: any[] = [];
submitting = false;
user = {
author: 'Han Solo',
avatar: 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png'
};
inputValue = '';
handleSubmit(): void {
this.submitting = true;
const content = this.inputValue;
this.inputValue = '';
setTimeout(() => {
this.submitting = false;
this.data = [
...this.data,
{
...this.user,
content,
datetime: new Date(),
displayTime: formatDistance(new Date(), new Date())
}
].map(e => {
return {
...e,
displayTime: formatDistance(new Date(), e.datetime)
};
});
}, 800);
}
}
API
nz-commentcomponent
Property | Description | Type | Default |
---|---|---|---|
[nzAuthor] | 显示评论的作者 | string | TemplateRef<void> | - |
[nzDatetime] | 展示时间描述 | string | TemplateRef<void> | - |
[nz-comment-avatar]directive
要显示为评论头像的元素。
nz-comment-contentcomponent
评论的主要内容。
nz-comment-actioncomponent
在评论内容下面呈现的操作项。