如何插入对象到Firebase锻造?- AngularFire 0.8.0 - Thinkster -第7章

How to insert object into Firebase Forge? - AngularFire 0.8.0 - Thinkster - Chapter 7

本文关键字:AngularFire 7章 Thinkster 锻造 Firebase 何插入 插入 对象      更新时间:2023-09-26

我正在使用最新版本的AngularFire(0.8.0)安装的Thinkster Ang-News教程。我成功地完成了教程的第7部分,但我被困在我需要将用户对象插入Firebase Forge的部分。代码的工作方式如下:

当一个新用户通过我的HTML表单注册时,"register"函数被调用并" user "。create(authUser, $scope.user.username);"在"register"函数内执行。

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

"User"服务有一个"create"函数,用于创建用户对象,并将对象信息存储在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

再次,我不能插入"用户[用户名]"对象到我的Firebase Forge与$save或$add AngularFire方法。我将非常感谢您的帮助。

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已经像老板一样回答了这个问题,但为了清楚起见,这里是100%工作的代码片段,以替换/services/user.js.

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

选David,别选我。