2017-09-03 5 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

관련 문제