如何将客户端属性添加到 FirebaseListObservable 中的项目?

2023-12-07

我正在构建一个由 Firebase 数据库结构支持的简单聊天应用程序:

messages: {
  "-KTjL_oLrKOboa2su2zk": {
    name: "puf",
    text: "Look I'm smiling :-)"
  },
  "-KTjNfaNem752ChFBcnC": {
    name: "puf",
    text: "And now I'm not smiling"
  }
}

我使用 Angular2 和 AngularFire2 来生成 HTML。我的控制器中有一个来自 Firebase 数据库的简单消息列表:

export class AppComponent {
  messages: FirebaseListObservable<any[]>;
  constructor(public af: AngularFire) {
    this.messages = af.database.list('messages');
  }
}

我想检测每条消息中的某些条件并将其转换为 HTML 中的表情符号。由于这纯粹是从现有内容派生的显示信息,因此我不想将其存储在数据库中。

我的 HTML 模板:

<li class="text" *ngFor="let message of messages | async">
  {{message.name}} {{message.emoji}}: {{message.text}}
</li>

在 Firebase JavaScript SDK 中,这类似于:

ref.on('child_added', function(snapshot) {
  var message = snapshot.val();
  if (message.text.indexOf(':-)') >= 0) {
    message.emoji = '????';
  }
  addMessageToHTML(message);
});

我应该如何在 AngularFire2 中进行此类客户端丰富?


不确定 JSSDK 中的工作原理,但是当您订阅时(使用async管)到FirebaseListObservable您已与 Firebase(上游)断开连接;您仍然会收到更新(下游)。所以你可以直接链接map()到可观察的,并在客户端添加属性:

import 'rxjs/add/operator/map'

export class AppComponent {
  messages: FirebaseListObservable<any[]>;
  constructor(public af: AngularFire) {
    this.messages = af.database.list('messages')
      .map(messages => messages.map(message => {
        if (message.text.indexOf(':-)') >= 0) {
          message.emoji = '????';
        }
        return message;
      }))
  }
}

UPDATE: 工作示例

如果您在服务器端更新第三条记录的数据,模板应该更新。但是,您不能将新消息添加到this.messages在客户端上,您必须重新创建引用并以这种方式更新服务器:

    af.database.list('messages').push({
      name: "new",
      text: "Now I'm sad :-("
      }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将客户端属性添加到 FirebaseListObservable 中的项目? 的相关文章

随机推荐

  • 从 Woocommerce 中的优惠券使用中排除具有 2 个特定属性术语的变体

    如果客户的购物车中有任何具有以下属性条款的特定产品变体 我需要防止使用优惠券 attribute pa style gt swirly attribute pa style gt circle 我查看了适用于限制特定产品和特定类别的 Woo
  • 特定时间码的 ffmpeg vfilter

    我想向某些视频添加水印 但我只希望水印出现在视频中的某些时间码 例如开始 中间 结束 并且仅出现几秒钟 我已经让 ffmpeg 按照此处的说明进行水印 但我不知道如何在不同的时间码打开 关闭水印 这是我用来添加水印的命令 ffmpeg i
  • 在 Powershell 中读取 Excel 工作表

    下面的脚本读取 Excel 文档的工作表名称 我该如何改进它 以便它可以提取每个工作表中 B 列的所有内容 从第 5 行开始 因此第 1 4 行被忽略 并创建一个对象 例如 如果工作表 1 中的 B 列 称为伦敦 具有以下值 Marleyb
  • Java 垃圾收集如何与循环引用一起使用?

    根据我的理解 如果没有其他东西 指向 某个对象 Java 中的垃圾收集会清理一些对象 我的问题是 如果我们有这样的事情会发生什么 class Node public object value public Node next public
  • 从 Eclipse RCP 应用程序中删除“文件、编辑等”菜单

    我想从我的 RCP 应用程序中删除 文件 编辑 源 重构 等菜单 我可以用吗hideActionSet 或者我应该做什么 这是正确的 在你的应用程序工作台窗口顾问 覆盖发布窗口打开 棘手的一点通常是找出要删除的操作集的名称 但您可以使用旧的
  • 正则表达式空白字符会导致注入吗?

    如果我想验证a的输入
  • EF 5 AddOrUpdate 重复数据

    这是种子方法中的代码 var city new City Name A var nh new List
  • 选择日期后,显示错误的月份[重复]

    这个问题在这里已经有答案了 我正在使用日期选择器 但每当我选择任何日期时 它都会显示 1 个月 例如 如果我选择 12 12 2016 它将显示在文本框中 12 11 2016 如果我选择 3 1 2017 它将显示 3 0 2017 这是
  • 我无法在任何地方访问我的数组对象,如何快速访问它们?

    如何在另一个函数中访问我的数组对象 即来自 arr 和电子邮件的数组对象 到目前为止 当我调用 auth auth 函数时 我只能访问 else 语句内的数组对象 我想知道如何才能做到这一点 let store CNContactStore
  • HttpListener - 如何将 WebException HTTP 304“未修改”错误发送回浏览器?

    如果我使用 HttpListener 如何将 WebException 304 错误模拟回浏览器 也就是说 我收到了对 HttpListener 的请求 然后获得了 HttpListenerContext 那么从现在开始 我将如何模仿 安排
  • 与 JPA 的数据库独立字符串比较

    我正在使用 JPA Hibernate 作为提供者 和底层 MySQL 数据库 我有一张表 其中包含德国所有街道的名称 每个街道名称都有一个唯一的编号 对于一项任务 我必须找出姓名的编号 为此 我编写了一个 JPQL 查询 如下所示 SEL
  • 使用 R 绘图在 R 中绘制点图

    生成具有这样两个因素的点图的最佳方法是什么 最好使用标准 R 图 而不是 ggplot 并从 2x2 数据框生成 水平线应该是手段 我尝试过克利夫兰点图 但无法弄清楚如何获取两个数据系列并让点抖动 下面的代码应该可以解决这个问题 set s
  • 为 Firebase 云消息传递 PHP 生成 OAUTH 令牌

    我有一个 PHP 页面 我用它来向我开发的移动应用程序的用户发送通知 该页面直到上个月都工作正常 然后它给了我这个错误 multicast id 5174063503598899354 成功 0 失败 1 canonical ids 0 结
  • Kivy:已弃用功能的替代方案

    我正在尝试适应这个code但我仍然是第一步 因为我不理解大多数称为 like like 的功能可选数据项 Adapter 列表适配器 or 可选视图 当我在 kivy 网站上查找它们时 我发现它们被列为已弃用 我在 Kivy 网站上找不到这
  • 如何为每个商店对象提供自己的库存数组列表?

    发现这个很难 基本上我有三个类 Store 类 Stock 类 然后是 GUI 类 创建商店时 我希望它有自己的 arrayList 以便我可以向其中添加多个库存对象 通过 GUI 完成 我尝试只包含所需的基本代码 已删除 getter 方
  • 如何对元组数组进行排序?

    如何实现 或创建 元组列表的数组排序 以下内容是从我的代码中收集到的 本质上我创建了一个元组数组 并通过 for 循环填充它 之后我尝试对其进行排序 var myStringArray String Int nil myStringArra
  • 内置 python 函数的时间/空间复杂度

    split strip open 内置 python 函数 的时间 空间复杂度是多少 有谁知道我可以在哪里查找这些函数的时间 空间复杂度 确切的答案将取决于输入到函数中的属性 最简单的找出方法可能是检查这些函数的源代码 python 源代码
  • 如何使用 ffmpeg 在大型复杂过滤器上 concat 之前应用 1:1 SAR

    我使用 ffmpeg 以类似于以下的方式连接视频 我的输入遇到了一个奇怪的错误 Parsed concat 0 000000002a05bb80 Input link in10 v0 parameters size 1280x720 SAR
  • 如何在 Python 中使用 K-Means 聚类找到最佳聚类数

    我是聚类算法的新手 我有一个电影数据集 包含 200 多部电影和 100 多个用户 所有用户都至少评价了一部电影 值 1 表示好 0 表示坏 如果注释者别无选择 则值为空白 我想根据相似的用户的评论对他们进行聚类 这样的想法是 将相似电影评
  • 如何将客户端属性添加到 FirebaseListObservable 中的项目?

    我正在构建一个由 Firebase 数据库结构支持的简单聊天应用程序 messages KTjL oLrKOboa2su2zk name puf text Look I m smiling KTjNfaNem752ChFBcnC name