【问题标题】:How to fix InvalidPipeArgument error when iterate *ngFor from Observable Array of Objects从 Observable Array of Objects 迭代 *ngFor 时如何修复 InvalidPipeArgument 错误
【发布时间】:2019-08-22 16:35:52
【问题描述】:

尝试从 Observable Array of Objects 迭代 *ngFor 时出错

我使用 Angular 8

聊天消息服务

private chatMessages = [];
private chatMessagesStream = new BehaviorSubject(this.chatMessages);

getMessages(): Observable<any> {
   return this.chatMessagesStream.asObservable();
}


addMessage(chatMessage) {
    this.chatMessages.push(chatMessage);
    this.chatMessagesStream.next(this.chatMessages);
}


聊天视图组件

private chatMessages:Observable<Array<any>>;

constructor(
   private chatMessagesService: ChatMessagesService) {
}

ngAfterViewInit() {
    this.chatMessagesService.getMessages().subscribe(messages => {
      this.chatMessages = messages;
      this.scrollMessagesToBottom(true);
    });
}

聊天 HTML 模板

<div class="row conpeek_message_chat_row" *ngFor="let chatMessage of chatMessages | async ">
...
</div>

在初始化组件之后,我在控制台中遇到了问题,可能是什么问题?

ERROR Error: InvalidPipeArgument: '[object Object]' for pipe 'AsyncPipe'

【问题讨论】:

    标签: angular ngfor


    【解决方案1】:

    移除异步管道

    由于chatMessages不可观察,它包含纯值

    this.chatMessagesService.getMessages().subscribe(messages => {
        this.chatMessages = messages; // <------- HERE , you are assigning value
        this.scrollMessagesToBottom(true);
    });
    

    如果你想保持异步管道,你必须将chatMessages分配给observable,像这样:

    this.chatMessages = this.chatMessagesService.getMessages();
    

    【讨论】:

    • 我想保持异步管道,但是当我尝试你的第二个灵魂时,我收到了一个类似ERROR Error: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'ngIf: true'. Current value: 'ngIf: false'.的错误
    • @storin,请检查您使用的是this.chatMessages = this.chatMessagesService.getMessages();
    • 我编辑了一个错误描述,现在我在控制台中的内容是正确的。在聊天视图组件中,我将这个 this.chatMessagesService.getMessages().subscribe(messages =&gt; { this.chatMessages = messages; this.scrollMessagesToBottom(true); }); 更改为这个 this.chatMessages = this.chatMessagesService.getMessages();
    • 这是另一个错误,这意味着您当前的问题已解决。它与*ngIf 相关,请在您的代码中检查。并投票并接受答案。
    • 好吧,这可能是真的
    猜你喜欢
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2022-01-22
    • 1970-01-01
    • 2020-04-24
    • 2022-11-14
    相关资源
    最近更新 更多