我在使用AngularFire / Firebase的Angular应用程序中有以下代码:
FirebaseBooks.$bind($scope, "books");
Firebase图书是一个服务,返回我的firebase对象
然后添加一本新书我通常(在设置3路数据绑定之前)
$scope.books.$add({
name: $scope.bookName,
isbn: $scope.bookIsbn,
thumbnail: $scope.bookThumbnail,
publishedDate: $scope.bookPublishedDate,
description: $scope.bookDescription
})
这仍然是现在我想要使用3路绑定的最佳方式,还是我应该使用其他方法,文档似乎暗示我不再需要$ add?如果我不知道我应该用什么方式将上述内容以firebase友好的方式引入$ scope.books?
如果这是一个愚蠢的问题,请原谅我!
提前致谢
答案 0 :(得分:1)
您可以直接将项目添加到绑定对象中,然后将它们发送到服务器。要获得唯一的按时间顺序排列的ID,您仍然可以使用$ add,或者您也可以直接从Firebase获取一个:
var ref = new Firebase(URL);
var data = $firebase(ref);
data.$bind( $scope, 'books' );
$scope.addToBooks = function(title) {
var uniqueId = ref.push().name();
$scope.books[uniqueId] = title;
};
答案 1 :(得分:1)
我发现绑定不是强制性的。
使用:
<script src="https://cdn.firebase.com/js/client/1.0.6/firebase.js"></script>
<script src="//cdn.firebase.com/libs/angularfire/0.7.1/angularfire.min.js"></script>
你可以这样做:
app.factory('FirebaseBooks', ['$firebase', function($firebase)
{
var firebase_base_url = "xxxx.firebaseIO.com/books";
return {
getBookRef: function(bookID,childName)
{
fb_url = firebase_base_url+'/'+bookID;
var firebaseRef = new Firebase(fb_url);
return $firebase(firebaseRef);
}
};
}]);
然后:
$scope.bookRef = firebaseService.getBookRef(bookID); // MAY OR MAY NOT BE ALREADY POPULATED
$scope.bookRef.$on('loaded', function(snapshot)
{
// IF FIREBASE REF IS EMPTY, POPULATE IT
if(snapshot === null)
{
$scope.bookRef.$set(
{
name: $scope.bookName,
isbn: $scope.bookIsbn,
thumbnail: $scope.bookThumbnail,
publishedDate: $scope.bookPublishedDate,
description: $scope.bookDescription
}).then(function(ref)
{
// DO WHAT THOU WILST WITH YOUR PROMISE BEING FULFILLED
});
}
// --- EOF - IF FIREBASE REF IS EMPTY, POPULATE IT
else
{
// console.log('snapshot seems to be already populated');
}
console.log('---> snapshot : ');
console.log(snapshot);
});
一旦$ scope。 firebaseRef 被3向绑定,你可以在你的控制器的函数中操作$ scope。 firebaseRef ,这是一个JS对象,然后只需使用。$保存()。
例如,您可能有一个使用$ child()删除子条目的函数。
假设您将此“addAuthorfromUI”函数绑定到UI中的提交按钮:
$scope.addAuthorfromUI = function(bookID) // ASSUMING NG-MODEL 'bookID' IS PASSED
{
$scope.bookRef.author = $scope.author; // ASSUMING NG-MODEL 'author' IN TEMPLATE
$scope.bookRef.$save(); // YOU JUST APPENDED STUFF TO THE OBJECT, NOW SAVE IT TO FB
}
不确定为什么不需要$ bind(),可能是因为我使用的版本,这就是我指定API版本的原因。