Podążam za tutorialem Thinkster Ang-News z najnowszą wersją Enginefire (0.8.0) zainstalowaną. Udało mi się dostać się do Część 7 samouczka pomyślnie, ale utknąłem na części, w której muszę wstawić obiekt użytkownika do FireBase Forge. Kod działa w następujący sposób:

Gdy nowy użytkownik rejestruje za pośrednictwem mojego formularza HTML, nazywany jest funkcja "Zarejestruj" i "User.Create (Authuser, $ scope.user.username);" jest wykonywany w funkcji "Zarejestruj".

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

Usługa "Użytkownik" ma funkcję "Utwórz", która tworzy obiekt użytkownika i powinien przechowywać informacje o obiekcie w FireBase Forge. Jak widać poniżej, "Użytkownicy Jednak nic nie dzieje się w moim FireBase Forge, gdy wywoływana jest metoda $ Save. Sprawdziłem najnowsze specyfikacje Angularfire i jak widać w moim kodzie komentarze (//), próbowałem połączyć $ asarray (), $ asobject () z zmienną "Użytkownicy", ale to nie działało. Kiedy używałem "Użytkownicy. $ Dodaj (nazwa użytkownika);" Zamiast dzwonić metodę $ Save, moja FireBase Forge właśnie dodała nazwę użytkownika bez właściwości obiektu.

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

Ponownie, nie mogę wstawić obiektu "Użytkownicy [Nazwa użytkownika]" do mojego FireBase Forge z metodami $ Save lub $ Add Add Sacularfire. Znacznie doceniłbym jakąkolwiek pomoc.

Jon.

4
jon5nav 15 sierpień 2014, 04:16

3 odpowiedzi

Najlepsza odpowiedź

W tej chwili modyfikujesz wiązanie, a następnie wywołujesz $save. Musisz użyć $asObject lub $asArray, aby dostać się do metody $save.

W twoim przypadku nie musisz synchronizować żadnych obiektów - wystarczy zaoszczędź. Możesz utworzyć nowy obiekt dla użytkownika i użyć $update na wiązaniu.

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
8
David East 28 sierpień 2014, 14:12

Po poprzedniej odpowiedzi użyłem tej składni aktualizacji $, aby ustawić priorytet, który wydaje się pracować:

users.$update(username, {
    md5_hash : authUser.md5_hash,
    username : username
}).then(function(ref) {
    ref.setPriority(authUser.uid);
});
2
deinerson1 16 sierpień 2014, 18:24

David odpowiedział już jak szef, ale dla jasności tutaj jest fragment 100% pracy , aby zastąpić /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;
});

Głosuj do Davida, nie ja :).

2
andycrone 28 sierpień 2014, 06:21