Javascript 如何将对象插入Firebase Forge?-AngularFire 0.8.0-Thinkster-第7章
我正在关注Thinkster Ang新闻教程,其中安装了最新版本的AngularFire(0.8.0)。我已经成功地完成了本教程的第二部分,但是我仍然需要在Firebase Forge中插入一个用户对象。该守则的运作如下: 当新用户通过我的HTML表单注册时,将调用“注册”函数,并在“注册”函数中执行“user.create(authUser$scope.user.username);”Javascript 如何将对象插入Firebase Forge?-AngularFire 0.8.0-Thinkster-第7章,javascript,angularjs,firebase,angularfire,Javascript,Angularjs,Firebase,Angularfire,我正在关注Thinkster Ang新闻教程,其中安装了最新版本的AngularFire(0.8.0)。我已经成功地完成了本教程的第二部分,但是我仍然需要在Firebase Forge中插入一个用户对象。该守则的运作如下: 当新用户通过我的HTML表单注册时,将调用“注册”函数,并在“注册”函数中执行“user.create(authUser$scope.user.username);” // login and registration page app.controller('AuthCtr
// login and registration page
app.controller('AuthCtrl',
function ($scope, $location, Auth, User) {
if (Auth.signedIn()) {
$location.path('/');
}
$scope.$on('firebaseSimpleLogin:login', function(){
$location.path('/');
});
$scope.login = function(){
Auth.login($scope.user).then(function(){
$location.path('/');
}, function (error){
$scope.error = error.toString();
});
};
$scope.register = function () {
Auth.register($scope.user).then(function (authUser) {
Auth.login($scope.user);//cause creating user auto login
User.create(authUser, $scope.user.username);
console.log(authUser);
$location.path('/');
}, function (error){
$scope.error = error.toString();
});
};
});
“用户”服务具有“创建”功能,该功能创建用户对象,并应将对象信息存储在Firebase Forge中。如下所示,调用“users.$save(username)”将用户“$save”到Firebase Forge中。然而,调用$save方法时,在我的Firebase Forge中不会发生任何事情。我查看了最新的AngularFire规范,正如您在我的代码注释(//)中所看到的,我尝试将$asArray()、$asObject()与我的“users”变量组合起来,但没有成功。当我使用“users.$add(username);”而不是调用$save方法时,我的Firebase Forge只是添加了用户名而没有对象的属性
app.factory('User', function ($firebase, FIREBASE_URL, Auth, $rootScope) {
var ref = new Firebase(FIREBASE_URL + 'users');
var users = $firebase(ref);
//var users = $firebase(ref).$asObject();
//var users = $firebase(ref).$asArray();
var User = {
create: function (authUser, username) {
users[username] = {
md5_hash: authUser.md5_hash,
username: username,
$priority: authUser.uid
};
//users.$add(username);
users.$save(username).then(function () {
setCurrentUser(username);
});
}, // end of create fxn
同样,我不能使用$save或$add AngularFire方法将“users[username]”对象插入我的Firebase Forge。我将非常感谢任何帮助
Jon现在您正在修改绑定,然后调用
$save
。您必须使用$asObject
或$asArray
来获得$save
方法
但在您的情况下,您不需要同步任何对象,只需保存一个即可。您可以为用户创建一个新对象,并在绑定上使用$update
app.factory('User', function ($firebase, FIREBASE_URL, Auth, $rootScope) {
var ref = new Firebase(FIREBASE_URL + 'users');
var users = $firebase(ref);
var User = {
create: function (authUser, username) {
users.$update(username, {
md5_hash: authUser.md5_hash,
username: username,
priority: authUser.uid
});
}, // end of create fxn
在前面的回答之后,我使用$update语法设置优先级,这似乎有效:
users.$update(username, {
md5_hash : authUser.md5_hash,
username : username
}).then(function(ref) {
ref.setPriority(authUser.uid);
});
David已经像老板一样回答了这个问题,但为了清楚起见,这里是要在/services/user.js中替换的100%工作代码片段
'use strict';
app.factory('User', function ($firebase, FIREBASE_URL, Auth, $rootScope) {
var ref = new Firebase(FIREBASE_URL + 'users');
var users = $firebase(ref);
var User = {
create: function (authUser, username) {
users.$update(username, {
md5_hash: authUser.md5_hash,
username: username,
setPriority: authUser.uid
});
}
};
return User;
});
投票支持大卫,而不是我:)。嗨,大卫,谢谢你的解释。现在,我能够成功地将用户数据存储到我的Forge!但是,第一次尝试您的解决方案时,我没有工作,所以我检查了控制台,发现了此错误:“错误:Firebase.set失败:第一个参数在属性“phil”中包含无效的键($priority)。键必须是非空字符串,不能包含“.”、“$”、“/”、“[”、或“]”。总之,我已注释掉“$priority:authUser.uid”并且我成功地在我的Forge.FYI中创建了一个键和值对象,我还测试了我的旧代码,添加了“var users=$firebase(ref)。$asObject();“并注释掉“$priority:authUser.uid”,我留下了$save方法,它还成功地在我的Forge中创建了一个用户对象。现在,我唯一的问题是修复$priority问题。David,所以我相信我已经解决了……在阅读之后,似乎作为键传入的任何内容都需要是有效的JSON对象。因此,我不能”$“$priority:authUser.uid”中的。我刚刚使用了“setPriority:authUser.uid”(来自Firebase SDK),它似乎可以工作。如果你还有其他建议,请告诉我。格雷西亚斯!不幸的是,这个答案被弃用了:
$firebase
服务在1.0.0中不再可用(可能更快?),而且$update
也被悄悄地删除了——在任何发行说明中都没有提到:/目前,将不得不使用普通的JSAPI,或者执行$firebaseObject.$loaded()。然后(函数)(obj){obj.myUpdates=newData}.$save()
这非常不方便,因为您不必加载父对象来保存新对象。@premiumFrye如果您只需要将数据更新到Firebase,那么JS api就最有意义了。AngularFire是一组处理集合绑定的服务。如果您想了解有关迁移的详细信息,可以在guid中找到一个部分关于从0.9迁移到1.0。这详细说明了所有突破性的变化。好东西,安迪。谢谢你发布这个片段。