【问题标题】:Angular: Push Generated Timestamp on Submitted FormAngular:在提交的表单上推送生成的时间戳
【发布时间】:2014-10-29 11:51:56
【问题描述】:

我在 Angular 中编写了一个表单,它将表单中提交的数据发送到我的 Firebase 中一个名为 places 的对象。

HTML

<form role="form" name="addPlaceForm" ng-submit="createHospital(newHospital)">
  <input type="text" placeholder="Enter title here" ng-model="newHospital.title">
  <button type="submit" class="btn btn-primary btn-lg">Submit</button>
</form>

JS

var rootRef = new Firebase('URL');
var placesRef = rootRef.child('places');

function createHospital(hospital) {
  placesRef.push(hospital);
}

有没有一种方法可以在提交时将名为 created_at 的生成时间戳推送到我的 places 对象?

"created_at" : "2014-07-15T01:52:33Z"

还有其他自动化数据,例如推送唯一 ID。

对此的任何帮助将不胜感激。提前致谢!

【问题讨论】:

    标签: json angularjs firebase


    【解决方案1】:

    有没有一种方法可以在提交时将名为 created_at 的生成时间戳推送到我的位置对象?

    从客户端传递时间戳的另一种方法是使用 Firebase 的内置 Firebase.ServerValue.TIMESTAMP,记录为:

    Firebase 服务器自动填充当前时间戳(自 Unix 纪元以来的时间,以毫秒为单位)的占位符值。

    所以你可以这样做:

    function createHospital(hospital) {
      hospital.created_at = Firebase.ServerValue.TIMESTAMP;
      placesRef.push(hospital);
    }
    

    更多信息请看这篇帖子:https://www.firebase.com/blog/2013-06-17-howto-build-a-presence-system.html

    其他自动化数据呢,例如推送唯一 ID?

    当您调用 Firebase push 方法时,已经为您生成了一个唯一 ID。 documentation for push

    使用唯一名称生成新的子位置并返回对其的 Firebase 引用。

    Firebase 保证此 ID 是唯一的,特别是让您的应用程序不必担心它。 push 生成的 ID 采用 -JXd1pbUU89Xbd4BYvx6-JZoLcBKnd1A8Gn-ZP0I 等形式。

    我建议坚持使用该 ID,而不是生成您自己的附加 ID。如果您更喜欢生成自己的 ID,我只会使用该 ID 并使用它来命名您的节点,而不是让 push 为您生成一个:

    var newID = ID_GENERATE_FUNCTION();
    placesRef.child(newID).set(hospital);
    

    请注意,这里我也不将 newID 存储在医院对象中。

    【讨论】:

    • 这也很有帮助!无论如何,我想使用将日期转换为 ISO 字符串格式,所以我想我不需要使用 Firebase 的内置选项,或者我会吗?关于 ID,我想要一个可以在 URL 上使用的 6 位唯一 ID,例如:site.com/245372/hospital-name。我是否认为最好将此 id 存储在医院对象中?
    • 我更喜欢将东西只存储在一个地方。如果您使用自己生成的 ID 作为 Firebase 对象的名称,这意味着我不会将其存储为每个对象的属性。但这可能只是个人喜好。
    【解决方案2】:

    当你将医院添加到数组中时,你可以创建你想要的两个参数:

    function createHospital(hospital) {
        var newHospital = angular.copy(hospital);
        newHospital.created_at = new Date();
        newHospital.ID = ID_GENERATE_FUNCTION();
        placesRef.push(newHospital);
    }
    

    【讨论】:

    • 我似乎无法让它工作。该项目已添加到我的 Firebase,但 created_atID 都不存在。
    • 推送后直接添加控制台日志。还要确保你推的是新医院而不是医院。
    • 我在控制台日志中收到ID_GENERATE_FUNCTION is not definedplnkr.co/edit/kfH4I5Fzy2Ma14FjQj67?p=preview
    • 你必须自己创建那个函数:)
    • 啊,好吧,这更有意义(duh!):s。日期被添加到控制台日志中的对象中,是否有任何原因它没有添加到 Firebase 对象中,但 title 是?
    猜你喜欢
    • 2021-07-10
    • 2015-07-12
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    相关资源
    最近更新 更多