我的控制器中有以下功能:
$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> - {{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来解决这个问题吗?
我正在使用已经取消以下版本的凉亭:
答案 0 :(得分:4)
quick glance bug docs $firebaseObject
工作{{3}}。很明显,它没有正确处理特殊对象Firebase.ServerValue.TIMESTAMP
的值,它告诉服务器将时间戳放在服务器端。但是,使用同步方法$firebaseArray
将同一对象添加到$add
时,情况并非如此。
也许我错过了flush
的某种$firebaseObject
方法,但我找不到它。
在任何情况下,您都应使用$firebaseArray
,因为您的数据类型为Array
。并且不要忘记按{{3}}
$add
,$save
和$remove