Firebase/angularFire -当使用3路数据绑定时,我还应该使用$add吗?



我在一个使用AngularFire/Firebase的Angular应用中有以下代码:

FirebaseBooks.$bind($scope, "books");

Firebase books作为一个服务返回给我一个Firebase对象

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

$scope.books.$add({
    name: $scope.bookName,
    isbn: $scope.bookIsbn,
    thumbnail: $scope.bookThumbnail,
    publishedDate: $scope.bookPublishedDate,
    description: $scope.bookDescription
  })

这仍然是最好的方式,现在我想使用3路绑定或我应该使用其他方法,文档似乎建议我不再需要$add?如果我不知道,我应该用什么把上面的代码放到$scope中呢?以一种友好的方式阅读?

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

Thanks in advance

您可以直接将项添加到绑定对象中,然后将它们发送到服务器。要获得一个惟一的、按时间顺序排列的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>


你可以这样做:

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);
    });


一旦美元范围。firebaseRef是3-way绑定,你可以直接操作$作用域。firebaseRef,这是一个JS对象,在你的控制器的函数中,然后使用。$save()。例如,您可以使用$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版本的原因。

相关内容

  • 没有找到相关文章

最新更新