В настоящее время я работаю над списком сообщений в моем проекте Angular.Каждое сообщение имеет содержание и идентификатор пользователя плаката.
В каждом сообщении я хочу получить имя пользователя и возраст из Cloud Firestore, используя идентификатор пользователя сообщения.Но я получаю ошибку ниже.
ERROR Error: Function CollectionReference.doc() requires its first argument to be of type non-empty string, but it was: a custom Object object
at new FirestoreError (index.cjs.js:346)
Как мне это сделать?Кроме того, есть ли способ не использовать pipe дважды для имени и возраста?
Это класс Post.
export class Post {
postId: string;
userId: string;
content: string;
}
Это класс User.
export class User {
userId: string;
name: string;
age: number;
}
Это шаблон списка сообщений.
<div *ngFor="let post of (posts | async)>
<div>Name: {{(post.userId | userIdToUser | async)?.name}}</div>
<div>Age: {{(post.userId | userIdToUser | async)?.age}}</div>
<div>Content: {{post.content}}</div>
</div>
Это канал, который преобразует userId в Observable of User.
import { Pipe, PipeTransform } from '@angular/core';
import { User } from '../user';
import { UserService } from '../user.service';
import { Observable } from 'rxjs';
@Pipe({
name: 'userIdToUser'
})
export class UserIdToUserPipe implements PipeTransform {
constructor(private userService: UserService){}
transform(value: string, args?: any): Observable<User> {
return this.userService.getUserWithId(value);
}
}