当对象包含 ng-repetate 时,如何使用 angularFire 保存 Firebase 对象 $asArray()

2024-03-27

我最近从 angularfire 0.6 切换到 0.8.0。我在保存包含数组本身的列表项时遇到问题。

我的对象account看起来像这样:

{
  "-JQruasomekeys0nrXxH" : {
    "created" : "2014-03-23T22:00:10.176Z",
    "durations" : [ {
      "$$hashKey": "00L", // this is generated by ng-repeat on arrays
      "end" : "2014-07-15T22:00:00.000Z",
      "start" : "2014-07-09T22:00:00.000Z"
    } ],
    "email" : "[email protected] /cdn-cgi/l/email-protection",
  }
}

持续时间是一个包含开始和结束时间段的数组,类似于 HTML 中两个输入字段的 ng-repeat。

<tr ng-repeat="duration in account.durations">
  <td>
     <input ng-model="duration.start" datepicker>
  </td>
  <td>
     <input ng-model="duration.end" datepicker>
  </td>
</tr>

在将帐户保存到 firebase 之前,我在控制器中执行 angular.copy($scope.account) ,以摆脱角度 $$hash 值。这在 angularfire 0.6.0 中有效。

在 angularfire 0.8.0 中,我仍然收到错误:

错误:Firebase.set 失败:第一个参数包含无效密钥 ($$hashKey) 在属性“durations.0”中。键必须是非空字符串 并且不能包含“.”、“#”、“$”、“/”、“[”或“]

当使用内部有数组的对象时,这意味着如何通过 AngularFire 来解决这个问题?持续时间不会是我在帐户中拥有的唯一数组。那么有没有更专业的解决方案,或者我是否必须在通过 AngularFire 保存到 Firebase 之前复制每个数组对象?

预先感谢您的任何提示。

更新(2014 年 8 月 11 日)经过更多研究后,问题不在于使用 angular.copy() 不再起作用。事实上确实如此。但是使用 AngularFire 方法 $save() 更新/修改现有数据集非常不方便(https://www.firebase.com/docs/web/libraries/angular/api.html#angularfire-firebaseobject-save https://www.firebase.com/docs/web/libraries/angular/api.html#angularfire-firebaseobject-save)因为在执行 angular.copy() 之后我似乎无法找到 $save() 项目的正确方法。

更新 2(2014 年 8 月 12 日)我暂时找到了一个解决方法,但实际上我首先想避免的是解决方法:

// loop for every duration, that should clean the object from "$$hashKey" attributes
angular.forEach($scope.account.durations, function (value, index) {
  var cleanValue = {};

  // checks, if the date is a JSON string already
  if (typeof value.start === 'string') {
    cleanValue.start = value.start;
  } else {
    cleanValue.start = value.start.toJSON();
  }

  // checks, if the date is a JSON string already
  if (typeof value.end === 'string') {
    cleanValue.end = value.end;
  } else {
    cleanValue.end = value.end.toJSON();
  }

  // overwrite the array object at index to get loose of $$hashKey
  $scope.account.durations[index] = cleanValue;
});

我认为这种解决方法利用了 Firebase 中基于文档的原则的优势,因为在通过 AngularFire 存储对象之前我必须知道对象的确切属性。

更新 3(14 年 8 月 13 日)我添加了一个 jsfiddle 来显示问题:jsfiddle.net/1fem6byt http://jsfiddle.net/1fem6byt

如果您向数组添加行,然后尝试将对象保存到 firebase,则控制台中会出现 $$hashKey 错误(上面给出)。有多种方法可以解决这个问题,但如果可能的话,我正在寻找一种更简单或更干净的 AngularFire 解决方案。我可能无法正确添加行——或者我错过了什么?


当然,在 firebase 中解决这个问题的最好方法是@Kato https://stackoverflow.com/users/394010/kato提到并且将数组中的数据实时绑定到视图中,您应该通过 $asArray 实例使用额外的 firebase 同步对象。

就像这个解决方案一样:http://jsfiddle.net/RaVbaker/sb00kor8/1/ http://jsfiddle.net/RaVbaker/sb00kor8/1/但是您将失去使用类似按钮“按需”保存数据的可能性Save to Firebase。 Firebase 数组对象发生更改后,它们将立即保存。但它也将为您提供跨页面数据的灵活性和同步。

但在您的情况下,另一个更容易的方法是改变角度跟踪对象的唯一性的方式NG-重复指示。可以通过设置来完成track by $index在最后ng-repeat陈述。

改变ng-repeat="duration in account.durations"进入这个:

 ng-repeat="duration in account.durations track by $index"

您的 jsfiddle 使用此解决方案更新:http://jsfiddle.net/RaVbaker/sb00kor8/2/ http://jsfiddle.net/RaVbaker/sb00kor8/2/

更多信息关于track by对于ngRepeat你可以明显发现在官方文档中 https://docs.angularjs.org/api/ng/directive/ngRepeat.

希望我有所帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当对象包含 ng-repetate 时,如何使用 angularFire 保存 Firebase 对象 $asArray() 的相关文章

  • 在 OpenXML 中应用数字格式

    我正在尝试使用 OpenXML 从头开始 创建 Excel 电子表格 并且一切正常 将实际值转储到实际单元格中 但现在我正在尝试将数字格式应用于列 但遇到了问题 我有styles xml看起来像这样
  • 如何在odoo中重写js函数

    我想加载 shop checkout url 函数是 odoo define change info order website sale change info order function require use strict oe w
  • 如何在 Angular 2 中订阅 DOMContentLoaded 事件?

    我正在将 UI 主题从 Angular 1 移植到 Angular 2 在第 1 个版本中 我有 viewContentLoaded事件 我想将其重新制作为 Angular 2 我正在尝试使用 HostListener DOMContent
  • 使用 Swift 解析框架

    有人尝试过将 Parse Framework 与 swift 一起使用吗 只要添加桥接文件 您就可以使用 swift 和 Objective C 代码 这是我的查询 从 Parse 返回的 对象 数组正确地包含了我的所有数据 但该方法在将
  • 为什么 .each 在我的 Rails 视图中完成后会重复数组? [复制]

    这个问题在这里已经有答案了 在我的 Rails 视图页面中 我有以下循环 它应该循环遍历我的 tag list 数组并打印每个标签 由于某种原因 它在打印每个单独的标签后会重复该数组 例如 这个数组有两个元素 ruby python 每个方
  • 使用 CDI+JSF 使会话失效不起作用

    我正在尝试在我的应用程序中实现注销 所以我这样做了 public String logout try FacesContext facesContext FacesContext getCurrentInstance ExternalCon
  • NV_path_rendering替代方案[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我刚刚观看了 Siggraph 2012 的一个非常令人印象深刻的演示 http nvidia fullviewmedia com sig
  • Selenium Python 使用代理运行浏览器[重复]

    这个问题在这里已经有答案了 我正在尝试编写一个非常简单的脚本 该脚本从 txt 文件获取代理 不需要身份验证 并用它打开浏览器 然后沿着代理列表循环此操作一定次数 我确实知道如何打开 txt 文件并使用它 我的主要问题是让代理正常工作 我见
  • Google 地图 api 中的 infoWindow 数组

    我寻找错误 但找不到它 由于某种原因 任何谷歌地图信息窗口总是显示相同的信息 这是一个咖啡脚本代码 infowindow new google maps InfoWindow for company in companiesData mar
  • 使用 OpenLayers 动态添加自定义标记到地图

    我想让用户在地图上添加自定义标记以及每个标记的描述 任何提示 任何教程的链接都会非常有用 您可以注册一个函数来在地图上 点击 事件 当用户单击它时 会自动添加该标记 尝试这样的事情 map is your map created using
  • 使用 PowerShell 检查 AD 中是否存在组

    我想为该组创建代码来检查该组是否存在 但是 我无法开始工作 因为它成功地将用户和组的部分成员仅添加到一个组中 而不是其他组 因为我设法在活动目录中创建一个组并从 csv 中读取 这是我的代码和结果 似乎在成功添加用户并添加组成员后我总是收到
  • 如何在运行时更改 UIMenu 内 UIAction 的状态?

    如何更改 UIAction 的状态 目标是切换 UIMenu 内 UIAction 旁边的状态复选标记 更改 UIAction 的state通过存储在视图控制器中的引用似乎根本不会改变状态 我错过了什么吗 View Controller i
  • 在Java的System.out中以表格格式输出

    我正在从数据库获取结果 并希望将数据作为 Java 标准输出中的表输出 我尝试过使用 t 但我想要的第一列的长度变化很大 有没有办法将其显示在类似输出的漂亮表格中 Use System out format http java sun co
  • Shap - 颜色条不显示在摘要图中

    显示summary plot时 不显示颜色条 shap summary plot shap values X train 我尝试过改变plot size 当绘图较高时 会出现颜色条 但它非常小 看起来不应该 shap summary plo
  • 将元素添加到 D3 圆包节点

    我正在尝试制作一个可缩放的圆形包装图 我希望每个子圆圈包含一个较小的图表 该图表始终具有相同的结构 即 4 列 只有条形的高度会改变 我尝试添加一个简单的rect到目前为止我的图表 但矩形没有添加到圆圈中并且是静态的 JS var marg
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec
  • 截断段落前 100 个字符并隐藏段落的其余内容,以通过更多/更少链接显示/隐藏其余内容

    我有一个超过 500 个字符的段落 我只想获取最初的 100 个字符并隐藏其余部分 我还想在 100 个字符旁边插入 更多 链接 单击更多链接时 整个段落应显示并编辑文本 更多 到 更少 单击 更少 时 它应切换行为 段落是动态生成的 我无
  • jvm 如何以及何时何地更改 Linux 的最大打开文件值?

    在linux中 每个登录用户的每个进程的最大打开文件数有限制 如下所示 ulimit n 1024 当我学习java nio时 我想检查这个值 因为channel在Linux中也是一个文件 所以我编写了一个客户端代码来不断创建socketC
  • 同时有两个操作栏(底部和向上)?

    我需要制作两个操作栏 顺便说一下我正在使用actionBarSherlock 所以我真正需要的是在正常操作栏上放置一个 欢迎屏幕 开关 并添加两个正常的 ActionBar 操作选项 与我需要的类似的是 Gmail 和地图 如下所示 htt
  • 如何使用反应本机在数字键盘上添加“完成”按钮

    我在react native中使用数字键盘 我想在单击完成按钮时隐藏键盘 因为我想在键盘上方添加完成按钮 是否有可能像IOS应用程序一样隐藏键盘 任何帮助非常感激 我不确定这是否正是您想要的 但您可以使用 prop returnKeyTyp

随机推荐

  • 将 Xtext 与 StringTemplate 代码生成器链接

    在我当前的项目中 我试图链接用 xtext 编写的 DSL 规范和用 StringTemplate 编写的代码生成器 例如 我的 DSL 规范的语法如下 我通过 xText 提供的优秀编辑器工具输入此信息 structs TempStruc
  • 如何在WinRT下并行线程中执行C++函数?

    我有一个 C 代码 它使用 beginthreadex Windows 方法在线程中执行函数 现在我想将其移植到 WinRT 组件以将其包含在 Windows Phone 应用程序中 但Windows Phone不支持 beginthrea
  • 如何在 Excel VBA 中对字符串进行 URL 编码?

    是否有内置方法可以在 Excel VBA 中对字符串进行 URL 编码 或者我是否需要手动执行此功能 不 没有任何内置内容 直到 Excel 2013 看到这个答案 https stackoverflow com a 24301379 18
  • Java COM 桥

    我有一个超低延迟程序 需要与 Windows COM 组件交互 最快的方法是什么 使用像 JACOB 这样的 COM 桥或编写本机 COM 库并使用像 ZeroMQ 这样的消息总线发送消息 如果您使用 ZeroMQ 您将处理两个进程 将消息
  • 使用 Guid 和自定义表名称以及 Asp.net Identity 1.1 Alpha 创建自定义实现

    我从不同的问题中得出结论 在我提出问题时在下面列出 我想做五件事 据我从这些问题和答案中可以看出 所有这些都可以在我的 OnModelCreating 方法中完成 Preface 我正在使用 Asp Net Identity 1 1 alp
  • 叉子和线程有什么区别?

    谁能解释一下叉子和线程之间的区别 分叉给你一个全新的进程 它是当前进程的副本 具有相同的代码段 当内存映像发生变化时 通常这是由于两个进程的不同行为 您会分离内存映像 写入时复制 但可执行代码保持不变 任务不会共享内存 除非它们使用某些内存
  • 配置 Xcode 4 工作区以在需要时构建依赖项的正确方法是什么?

    我的情况很简单 一个工作区有两个兄弟项目 一个主 iOS 应用程序和一个构建该应用程序使用的多个静态库目标的项目 以下是我配置构建的方式 将主应用程序的构建设置中的 用户标题搜索路径 指向库项目位置 通过源树 在我的应用程序的主要目标的编辑
  • 如何将json数组插入mysql数据库

    您好 我正在尝试将 json 数组插入到我的 MySQL 数据库中 我正在从我的 iPhone 传递数据 我已将数据转换为 json 格式 并且使用未插入到我的服务器中的 url 将数据传递到我的服务器 这是我的 json 数据 姓名 0
  • SKshapenode 没有响应Physicsbody

    我创建了一个SKShapeNode我已经分配了一个physicsBody到它 然而 当有接触时它不会被触发 的制作SKShapeNode code SKShapeNode gravityline SKSpriteNode lolo SKSp
  • 堆积条形图上的R ggplot标签[重复]

    这个问题在这里已经有答案了 我需要将数据放入堆栈条形图中 但是当我添加计数标签时 一些标签位于类别上方 一些标签位于类别下方 我尝试修改 geom text 函数的位置参数但无济于事 下面是一个可重现的示例 显示了该类别上方 下方 类别座位
  • 如何使用 Pipeline 引用 Jenkinsfile 目录?

    我有一个 groovy 文件 我想从 Jenkinsfile 运行 ie load script groovy 但是 如果该文件与 Jenkinsfile 存储在同一目录中 我不确定如何引用该文件 我正在从 git 加载 Jenkinsfi
  • 使用 stripplot 在 seaborn 中用中线绘制点

    我在seaborn中有以下情节 df pandas DataFrame sample X X X Y Y Y value 0 2 0 3 0 4 0 7 0 75 0 8 rep a b c a b c plt figure ax sns
  • 在 HQL 或 Criteria 中获取 DATEPART?

    如何使用 HQL 或 Criteria 获取时间的 DATEPART 我用谷歌搜索并得到了一些提示 但还不够 如果有人以前经历过 请告诉我们 提前致谢 看看这篇关于在nhibernate中使用sql函数 http ayende com Bl
  • mySQL 每日从一个表备份到另一个表

    如果我有两个具有相同定义的表 我将如何每天备份其中的数据 我可以使用 mySQL Administrator 执行类似的操作吗 每天中午 12 00 将 main table 中的所有行复制到 backup table 如果是增量备份会更好
  • Android 上的辅助功能测试自动化

    我最近开始研究 Android 上的自动化辅助功能测试 网络上没有太多信息 有人探索过这个或者目前正在这样做吗 如果是这样 您能分享您的想法 方法吗 似乎 Android 的 uiautomator 依赖于辅助功能来工作 但它不支持测试辅助
  • FullCalendar:事件最初未从函数调用(AJAX)渲染

    我已将 FullCalendar 配置为从 AJAX 请求中提取其事件 但首次加载页面时它们不会在日历上呈现 document ready function sh1client new Array sh2client new Array s
  • 为什么回调在 Ruby on Rails 中使用符号

    我很难理解何时以及何时不应该在 Rails 中使用符号 我知道符号与没有许多方法的字符串并没有太大不同 我还知道这些符号是很好的键 因为同名的符号在内存中占据一个地址 我很难理解为什么 Rails 决定在某些情况下使用符号 如果我有回调 b
  • 主机名未使用 Winsock 转换为 IP 地址

    getaddrinfo 不会将主机名转换为 IP 地址 因此不会connect 到服务器 我的实现有问题吗 编译时没有警告消息 这个函数调用的是connect正确的 connect client result gt ai addr resu
  • 在 Python 中编写仅附加 gzip 日志文件

    我正在构建一项服务 在其中记录来自多个源的纯文本格式日志 每个源一个文件 我不打算轮换这些日志 因为它们必须永远存在 为了使这些永远存在的文件更小 我希望我可以在飞行中对它们进行 gzip 压缩 由于它们是日志数据 因此文件压缩得很好 在
  • 当对象包含 ng-repetate 时,如何使用 angularFire 保存 Firebase 对象 $asArray()

    我最近从 angularfire 0 6 切换到 0 8 0 我在保存包含数组本身的列表项时遇到问题 我的对象account看起来像这样 JQruasomekeys0nrXxH created 2014 03 23T22 00 10 176