【问题标题】:How to use multiple models inside service in Angular / Ionic app?如何在 Angular / Ionic 应用程序的服务内使用多个模型?
【发布时间】:2020-04-03 14:51:09
【问题描述】:

在我的 Angular / Ionic 应用程序中,我尝试在下面创建 2 个模型(对话和消息),并在我的对话服务中使用它们。

当用户登录时,他们应该会看到他们之前与机械师(也是用户,但使用不同的 userType)的对话列表。

当他们点击一个对话时,他们会被带到 Conversation_Detail 屏幕,该屏幕显示属于该对话的所有消息。

在 Conversation_Detail 上,用户和机械师可以发送新消息。这些新消息将添加到现有对话中。

这是我拥有的模型:

conversation.model.ts

export class Conversation {
    constructor(
        public id: string,
        public userId: string,
        public mechanicId: string,
        public messages: Array<string>,
    ) { }
}

message.model.ts

export class Message {
    constructor(
        public id: string,
        public text: string,
        public userId: string,
        timestamp: string
    ) { }
}

正如您在上面看到的,我正在尝试将多条消息连接到一个对话。

这里是我试图创建一个虚拟对话的地方:

Conversations.service.ts

private _conversations: Conversation[] = [
    new Conversation('c1', 'abc1', 'def2', ['Hi', 'What is your issue?'])
  ];

谁能告诉我如何正确链接对话和消息,以便我可以在对话服务中使用它们?

【问题讨论】:

  • 一个想法是在构造函数中使用这个消息数组来保存消息ID,这样你就可以在你想要的时候得到消息。
  • 或者,如果您使用对象数组,则可以将每条消息直接保存在其中,而不是字符串数组。喜欢(...,消息:消息[])
  • 嗨@LucasLeandro 感谢您的回复。您可以在下面的答案中发布这些更改吗?只是为了让我能正确理解你的建议。
  • 当然可以,但在此之前,请解释一下你想用更多细节做什么?就像,整个流程。这样我们就可以思考这个过程,也许可以给出更准确的答案
  • @LucasLeandro 没问题,会用这些细节更新我的问题,谢谢

标签: angular typescript


【解决方案1】:

我已经尝试修复它,这是我想出的,目前正在测试它,如果它工作正常会更新:

conversations.service.ts

private _conversations: Conversation[] = [
    new Conversation(
      'c1',
      'abc1',
      'def2',
      [new Message('mess1', 'Test message', 'abc1', '01/01/2020')])
  ];

conversation.model.ts

import { Message } from './message.model';

export class Conversation {
    constructor(
        public id: string,
        public userId: string,
        public mechanicId: string,
        public messages: Message[],
    ) { }
}

message.model.ts

export class Message {
    constructor(
        public id: string,
        public text: string,
        public userId: string,
        timestamp: string
    ) { }
}

【讨论】:

  • @LucasLeandro 这是您想要的解决方案吗?它现在按预期工作,是的。这种结构是否符合我在问题中概述的要求? IE。能否在 Conversation_Detail 页面上显示每个对话中的消息?
  • 是的!因为,如果您在内存中有此数据,您将能够访问每个对话中的所有消息,因为您初始化了传递消息的对话。请记住,当您收到一条新消息时,您必须将其放入 Messages Array 中,以便进行正确的对话。你能做到吗?也许您需要一个对话 ID,以便能够将每条消息重定向到正确的对话
  • 您是说当我创建新消息时,我可能需要对话 ID 将其链接回对话?如果是这样,所有新消息都将在 Conversation_Detail 中创建,所以我想在这种情况下我会有对话 ID
  • 取决于您的应用程序流程。如果你知道女巫对话在你里面,那么在创建消息的那一刻,你可以直接重定向它。如果你不这样做,那么这个 id 可能很重要
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 2021-02-12
相关资源
最近更新 更多