这基本上是这个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;我已经实施了,但似乎没有什么区别。
答案 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将在完成后调用您的函数。