Firebase/angularFire-使用3路数据绑定时是否仍应使用$add?

Firebase/angularFire-使用3路数据绑定时是否仍应使用$add?,firebase,angularfire,Firebase,Angularfire,我在AngularFire/Firebase的Angular应用程序中有以下代码: FirebaseBooks.$bind($scope, "books"); Firebase books是一项返回Firebase对象的服务 然后添加一本新书,我通常(在设置3路数据绑定之前)会这样做 这仍然是我现在想要使用3路绑定的最好方法,还是应该使用其他方法,文档似乎建议我不再需要$add?如果我不这样做,我应该使用什么来以firebase友好的方式将上述内容纳入$scope.books 如果这是个愚蠢的

我在AngularFire/Firebase的Angular应用程序中有以下代码:

FirebaseBooks.$bind($scope, "books");
Firebase books是一项返回Firebase对象的服务

然后添加一本新书,我通常(在设置3路数据绑定之前)会这样做

这仍然是我现在想要使用3路绑定的最好方法,还是应该使用其他方法,文档似乎建议我不再需要$add?如果我不这样做,我应该使用什么来以firebase友好的方式将上述内容纳入$scope.books

如果这是个愚蠢的问题,请原谅我


提前感谢

您可以直接将项目添加到绑定对象中,并将其发送到服务器。要获得唯一的按时间顺序排列的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;
};

我发现绑定不是强制性的

使用:

<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>

然后:

$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对象,然后只使用.$save()。 例如,您可能有一个使用$child()删除子条目的函数。 假设您将此“addAuthorfromUI”函数绑定到UI中的提交按钮:



不确定为什么不需要$bind(),可能是因为我使用的版本,这就是我指定API版本的原因。

再次感谢您的firebase帮助:)抱歉,请快速跟进-我的工厂看起来是这样的:。工厂('FirebaseBooks',['$firebase',函数($firebase){return$firebase(new firebase(“;}])我如何调用.push().name();as FirebaseBooks.push().name();失败。我应该在使用工厂时只使用$add吗?我不想在工厂外创建新的Firebase(URL)..push()位于Firebase ref上,而不是$Firebase。请注意,我分配了
var ref=new Firebase()
,然后执行了
ref.push().name()
;这些都包含在文档中。在您的第一个示例中,您通过了,但没有使用childName-您打算用它做什么?也感谢您的深入回答!哎呀,我的错,忘了删除它。不要考虑它。在我的系统中,“getBookRef”“是一项多用途功能。在我的原始代码中,如果提供了childName,那么返回的FireBase JS对象是。。。一个孩子。这是一种模块化的方法:不是将服务(工厂)相乘,而是只有一个,然后传递要检索的对象的名称。因此,在本例中,“getBookRef”将是“getObjectRef”,工厂函数可以接受(ObjectName,ObjectID,[childName])。因此:var book=getObjectRef(“book”,$id);var book_s_author=getObjectRef(“book”,$id,“author”);
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.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
     }