2017-09-03 60 views
0

我目前正在使用Angular 1.4.5和Firebase 4.3.0,並且有一些問題需要提出。使用Angular JS在Firebase中添加自動生成的密鑰

我想知道如何將由Firebase自動生成的密鑰添加到特定項目的數據中。

例如,通過下面的教程,我已經成功地存儲使用UID

我的火力地堡數據結構由火力地堡產生的用戶ID:

Click here to see my Firebase data structure

而這是代碼

myApp.factory('Authentication', ['$rootScope', '$location', '$firebaseObject','$firebaseAuth',function($rootScope, $location, $firebaseObject, $firebaseAuth){ 

var ref = firebase.database().ref(); 
var auth = $firebaseAuth(); 
var myObject; 

auth.$onAuthStateChanged(function(authUser){ 
    if(authUser){ 
    var userRef = ref.child('users').child('accounts').child(authUser.uid); 
    var userObj = $firebaseObject(userRef); 
    $rootScope.currentUser = userObj; 
    }else { 
    $rootScope.currentUser = ''; 
    } 
}); 

myObject = { 
    login: function(user){ 
    auth.$signInWithEmailAndPassword(
     user.email, 
     user.password 
    ).then(function(user){ 
     $location.path('/home'); 
    }).catch(function(error){ 
     $rootScope.message = error.message; 
    });//signInWithEmailAndPassword 
    },//login 

    logout: function(){ 
    return auth.$signOut(); 
    }, //logout 

    requireAuth: function(){ 
    return auth.$requireSignIn(); 
    },//require Authentication 

    register: function(user){ 
    auth.$createUserWithEmailAndPassword(
     user.email, 
     user.password 
    ).then(function(regUser){ 
     var regRef = ref.child('users').child('accounts').child(regUser.uid).set({ 
     date: firebase.database.ServerValue.TIMESTAMP, 
     regUser: regUser.uid, 
     firstname: user.firstname, 
     lastname: user.lastname, 
     email: user.email 
     }); //userinfo 
     myObject.login(user); 
    }).catch(function(error){ 
     $rootScope.message = error.message; 
    });//createUserWithEmailAndPassword 
    }//register 
};//return 

return myObject;}]);//factory 

這是我用來將項目添加到Firebase中的代碼(函數uploadItem和uploadItem1)

pageControllers.controller('UploadController',['$scope', '$firebaseAuth', '$firebaseArray', 
function($scope, $firebaseAuth, $firebaseArray){ 

    var ref = firebase.database().ref(); 
    var auth = $firebaseAuth(); 

    auth.$onAuthStateChanged(function(authUser){ 
    if(authUser){ 
     var recipesRef = ref.child('users').child('accounts').child(authUser.uid).child('recipes'); 
     var recipesInfo = $firebaseArray(recipesRef); 

     var recipes1Ref = ref.child('users').child('recipes'); 
     var recipes1Info = $firebaseArray(recipes1Ref); 

     var favoritesRef = ref.child('users').child('accounts').child(authUser.uid).child('favorites'); 
     var favoritesInfo = $firebaseArray(favoritesRef); 

     $scope.recipes = recipesInfo; 
     $scope.favorites = favoritesInfo; 

     $scope.uploadItem = function(){ 
     recipesInfo.$add({ 
      name: $scope.foodname, 
      category: $scope.foodcategory, 
      image: $scope.foodimage, 
      howtocook:$scope.foodhowtocook, 
      video:$scope.foodvideo, 
      date: firebase.database.ServerValue.TIMESTAMP 
     }).then(function(){ 
      $scope.foodname = ' '; 
      $scope.category = ' '; 
      $scope.foodimage = ' '; 
      $scope.foodhowtocook = ' '; 
      $scope.foodvideo = ' '; 
      $scope.message = 'Your recipes has been uploaded successfully!!'; 
     });//promise 
     }//uploadItem 

     $scope.uploadItem1 = function(){ 
     recipes1Info.$add({ 
      name: $scope.foodname, 
      category: $scope.foodcategory, 
      image: $scope.foodimage, 
      howtocook:$scope.foodhowtocook, 
      video:$scope.foodvideo, 
      date: firebase.database.ServerValue.TIMESTAMP 
     }).then(function(){ 
      $scope.foodname = ' '; 
      $scope.category = ' '; 
      $scope.foodimage = ' '; 
      $scope.foodhowtocook = ' '; 
      $scope.foodvideo = ' '; 
      $scope.message = 'Your recipes has been uploaded successfully!!'; 
     });//promise 
     }//uploadItem 

     $scope.addFavorite = function(name){ 
     favoritesInfo.$add({ 
      name: name, 
      // name: $scope.itemName, 
      // index: $scope.itemIndex, 
      date: firebase.database.ServerValue.TIMESTAMP 
     }).then(function(){ 
      $scope.message = 'Success!'; 
      $('#Popup').modal(); 
      console.log(name); 
     });//promise 
     }//uploadItem 

     $scope.deleteFavorite = function(key){ 
     favoritesInfo.$remove(key); 
     } //deleteFavorite 

     $scope.deleteRecipe = function(key){ 
     recipesInfo.$remove(key); 
     } //deleteFavorite 

    }//authUser 
    });//onAuthStateChanged}]);//myAll.controller 

我想每個項目的鍵添加到其數據,如把UID到用戶的數據,但我不知道怎麼辦。

回答

0

我從你的問題不解的是,要存儲自動生成的從火力成你推像下面的項鍵,

如果你想這樣的事情,也可以在完成兩種方式

1)純火力編碼

$scope.uploadItem1 = function(){ 
    var receipeInfoKey=recipes1Ref.push().key 
    or var receipeInfoKey=ref.child('users').child('recipes').push().key; 
    var receipeInfoObj={} 
    receipeInfoObj= { 
     name: $scope.foodname, 
     category: $scope.foodcategory, 
     image: $scope.foodimage, 
     howtocook:$scope.foodhowtocook, 
     video:$scope.foodvideo, 
     date: firebase.database.ServerValue.TIMESTAMP, 
     receipeKey:receipeInfoKey 
    } 
recipes1Ref .child(receipeInfoKey).set(receipeInfoObj) 
or 
ref.child('users').child('recipes').child(receipeInfoKey).set(receipeInfoObj) 
.then(function(){ 
     $scope.foodname = ' '; 
     $scope.category = ' '; 
     $scope.foodimage = ' '; 
     $scope.foodhowtocook = ' '; 
     $scope.foodvideo = ' '; 
     $scope.message = 'Your recipes has been uploaded successfully!!'; 
    });//promise 
    }//uploadItem 

2)角消防

//此方法會像成功推

$scope.uploadItem1 = function(){ 
    recipes1Info.$add({ 
     name: $scope.foodname, 
     category: $scope.foodcategory, 
     image: $scope.foodimage, 
     howtocook:$scope.foodhowtocook, 
     video:$scope.foodvideo, 
     date: firebase.database.ServerValue.TIMESTAMP 
    }).then(function(recipes1Ref){ 
     var receipePushedObj= recipes1Info.$getRecord(recipes1Ref.key); 
     // recipes1Ref.key this is the auto generated key after the successful push 

     if(receipePushedObj!=null){ 
     receipePushedObj.receipeKey=recipes1Ref.key; 
     recipes1Info.$save(receipePushedObj); 
     } 
     $scope.foodname = ' '; 
     $scope.category = ' '; 
     $scope.foodimage = ' '; 
     $scope.foodhowtocook = ' '; 
     $scope.foodvideo = ' '; 
     $scope.message = 'Your recipes has been uploaded successfully!!'; 
    });//promise 

這裏是我提出的第一種方法的工作樣本之後更新recipes1Info對象。 Js Fiddle Example