如何将对象插入Firebase Forge? - AngularFire 0.8.0 - Thinkster - 第7章

时间:2014-08-15 00:16:31

标签: javascript angularjs firebase angularfire

我正在关注安装了最新版AngularFire(0.8.0)的Thinkster Ang-News教程。我成功地成功完成了本教程的part 7,但我仍然遇到需要将用户对象插入Firebase Forge的部分。代码的工作原理如下:

当新用户通过我的HTML表单注册时,"注册"调用函数和" User.create(authUser,$ scope.user.username);"在"寄存器中执行"功能

// 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中。如下所示,"用户。$ save(用户名)"被叫到" $ save"用户进入Firebase Forge。但是,当调用$ save方法时,我的Firebase Forge中没有任何反应。我查看了最新的AngularFire规范,正如您在我的代码注释(//)中看到的那样,我尝试将$ asArray(),$ asObject()与我的"用户"变量,但不起作用。当我使用" 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方法将对象放入我的Firebase Forge中。我非常感谢任何帮助。

乔恩

3 个答案:

答案 0 :(得分:8)

现在您正在修改绑定,然后调用$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

答案 1 :(得分:2)

按照上一个答案,我使用这个$ update语法来设置优先级,这似乎有效:

users.$update(username, {
    md5_hash : authUser.md5_hash,
    username : username
}).then(function(ref) {
    ref.setPriority(authUser.uid);
});

答案 2 :(得分:2)

大卫已经像老板那样回答了这个问题,但为了清楚起见, 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;
});

投票给大卫,而不是我:)。