Ionic3 - 如何使用存储提供程序实现持久聊天系统?

时间:2018-04-12 15:56:15

标签: angular typescript ionic-framework ionic3 chat

我想用Ionic3创建一个基本的聊天系统。

我希望消息在应用程序中保留,所以我认为我需要使用类似他们在官方网站上推荐的Sotrage提供程序:

import { Storage } from '@ionic/storage';

export class MyApp {
  constructor(private storage: Storage) { }

  ...

  // set a key/value
  storage.set('name', 'Max');

  // Or to get a key/value pair
  storage.get('age').then((val) => {
    console.log('Your age is', val);
  });
}

但我的问题是,您认为保持消息顺序以便应用程序正确加载它们的最佳方法是什么?

也许会做类似......

保存邮件时

// this is just a quick idea. please, improve it if possible

let message = {
    channel: <channel>,
    timestamp: <timestamp>,
    from: <from>,
    to: <to>,
    content: <content>,
}
storage.set('message', {});
检索完整频道消息时

??? how to apply filters to retrieve messages from an specific channel in the proper order ???

我怀疑这是因为我没有看到存储提供商有过特殊的方法来过滤数据并做一些奇特的事情。所以我正在寻找有关这方面的建议。

谢谢!

3 个答案:

答案 0 :(得分:0)

对于'花哨的东西',你可以使用LokiJS。 LokiJS是一个内存数据库,拥有可以链接查找/​​排序/过滤/映射等的集合......完整的数据库可以作为json对象保存到离子存储器中。

网站http://lokijs.org目前处于离线状态。 文档在线here

答案 1 :(得分:0)

您可以使用本机存储,只需记住将新邮件加入旧对象并再次保存即可。

然后在html内部使用ngFor和pipe *ngFor="let message of messages | orderBy : ['timestamp']"

迭代对象

其他方法,就是使用sqlite包进行离子处理。它就像普通数据库那样https://ionicframework.com/docs/native/sqlite/

答案 2 :(得分:0)

使用observables。

Localstorage返回promises,因此您可以使用Observable.fromPromise(this.localStorage.getMessages())将返回的promise转换为Observable

然后*ngFor="let message of messages | async "

可以添加Timed订阅者以定期检查localStorage是否有更新。

您是否有任何特殊原因希望自己建立聊天?

你可以看一下对讲机,它有一个cordova和离子包。