调用add后,不会返回Firebase引用

时间:2014-06-28 04:36:16

标签: angularjs firebase angularfire

这基本上是这个question的重复(我很抱歉复制),但它是在另一个项目上,我似乎一直有这个问题,所以我希望有人可以看看我的代码并解释我一直在做错的事。

基本上我称之为ADD并且我没有获得返回值....我不完全确定是什么导致它。

function MyController($scope, $firebase, $http, $log) {
        var FB = "https://onaclovtech-home.firebaseio.com/apps/dog/"; // Enter in your FB name
        var ref = new Firebase(FB);
        var emailList = $firebase(ref);
        validateEmail = function (email) { 
           var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
           return re.test(email);
} 
        $scope.addEmail = function(name, email) {
            if (validateEmail(email))
            {
               var newResult = emailList.$add({"name" : name, "email" : email, "validated" : false});
               $log.log(newResult.toString());
               $log.log(newResult.name());

            }

        }

Additionaly Info。这个JSFiddle有效 http://jsfiddle.net/dLFxw/1/ 我无法想象发生了什么,但我只能想象它与控制器的关系以及我如何引用firebase。

我想也许这与&#34;限制(1)&#34;我已经实施了,但似乎没有什么区别。

http://jsfiddle.net/dLFxw/2/

1 个答案:

答案 0 :(得分:3)

documentation for AngularFire$add说明了以下内容:

  

此方法返回将数据保存到服务器时将履行的承诺。承诺将通过Firebase参考解决,您可以从中提取新添加数据的密钥名称。

它也提供了这个方便的例子:

$scope.items.$add({baz: "boo"}).then(function(ref) {
  ref.name();                // Key name of the added data.
});

你可以看到,他们将回调函数传递给then函数。

因此,如果您想从服务器记录新项目的名称,您可以执行以下操作:

 emailList
   .$add({"name" : name, "email" : email, "validated" : false})
   .then(function(ref) {
     $log.log(ref.name());
   })

您的混淆似乎是由$add的异步性造成的。当您致电$add时会调用服务器。虽然Firebase通常非常快,但可能会出现此调用需要一些时间才能完成的情况。这就是为什么在许多这样的异步API中你会传递一个所谓的回调函数,在本例中是then。您可以像&#34;将其添加到项目中,然后执行此操作&#34;。 Firebase API将在完成后调用您的函数。