在我的控制器中有以下函数:
$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来解决这个问题吗?
我使用的是bower,它已经拉下了以下版本:
- AngularFire 1.1.2
- 重火力点v2.2.7
- AngularJS v1.4.1
从快速浏览有一个bug在$firebaseObject
的工作。很明显,它没有正确处理一个特殊对象Firebase.ServerValue.TIMESTAMP
的值,它告诉服务器将时间戳放在服务器端上。但是,当使用同步方法$add
向$firebaseArray
添加相同的对象时,情况就不是这样了。
也许我缺少$firebaseObject
的某种flush
方法,但我找不到它。
在任何情况下都应该使用$firebaseArray
,因为您的数据类型是Array
。不要忘记使用$add
, $save
和$remove
,按照docs