Firebase.ServerValue.TIMESTAMP在视图中显示为{" .sv":"时间戳"}与.push()

时间:2015-07-06 21:57:00

标签: javascript angularjs firebase angularfire

我的控制器中有以下功能:

  $scope.add = function(newItem){
    if (!(newItem.title && newItem.text)) return;
    var sanitized = {
      title: newItem.title,
      text: newItem.text,
      date: Firebase.ServerValue.TIMESTAMP,
    };
    // $rootScope.currentUser is here bound with $firebaseObject(ref).$bindTo($rootScope, 'currentUser').
    $rootScope.currentUser.list.push(sanitized);
    // .list is an array: []. 
  };

我在我看来如下所示:

    <form name="newUp">
        <input ng-model="newItem.title">
        <textarea ng-model="newItem.text"></textarea>
        <button ng-click="add(newItem)">Submit</button>
    </form>

    <div ng-repeat="item in currentUser.list | orderBy:'-date'">
     <p>
      <span><a href="">{{item.title}}</a> <small>  -&nbsp;&nbsp;{{item.date | date:'d MMM yy'}}</small></span><br>
      <span ng-if="item.text"><small>{{item.text}}</small></span>
     </p>
    </div>

但是,单击提交按钮后,该项目将保存到firebase数据库,它将在屏幕上显示为:

{".sv":"timestamp"}

完全刷新页面后,它会显示带有正确时间戳的项目。有办法避免这种情况吗?我可以避免使用$ firebaseArray来解决这个问题吗?

我正在使用已经取消以下版本的凉亭:

  • AngularFire 1.1.2
  • Firebase v2.2.7
  • AngularJS v1.4.1

1 个答案:

答案 0 :(得分:4)

quick glance bug docs $firebaseObject工作{{3}}。很明显,它没有正确处理特殊对象Firebase.ServerValue.TIMESTAMP的值,它告诉服务器将时间戳放在服务器端。但是,使用同步方法$firebaseArray将同一对象添加到$add时,情况并非如此。

也许我错过了flush的某种$firebaseObject方法,但我找不到它。

在任何情况下,您都应使用$firebaseArray,因为您的数据类型为Array。并且不要忘记按{{3}}

使用$add$save$remove