2016-07-19 7 views
1

Ich bin neu in Firebase und ich bin mir nicht sicher, ob ich Daten richtig speichern.Korrekte Datenstruktur in Firebase

Ich baue ein Formular zum Speichern von Daten. Im Moment hat es nur 2 Felder, aber ich werde später ein paar weitere Eingabefelder hinzufügen.

<form> 
<div class="form-group"> 
    <input placeholder="Event Title..." class="form-control" name="eventTitle" ng-model="newEvent.title"> 
</div> 
<div class="form-group"> 
    <input placeholder="random..." class="form-control" name="eventRandom" ng-model="newEvent.random"> 
</div> 
<button type="submit" class="btn btn-primary pull-right" ng-click="addEvent(newEvent);newEvent = null;">send</button> 

Mein Controller sieht wie folgt aus:

Meine Form HTML sieht wie folgt aus

.controller('ChatCtrl', function ($scope, Ref, $firebaseArray, $timeout) { 
// synchronize a read-only, synchronized array of events, limit to most recent 10 
$scope.events = $firebaseArray(Ref.child('events').limitToLast(10)); 

// display any errors 
$scope.events.$loaded().catch(alert); 

// provide a method for adding a event 
$scope.addEvent = function(newEvent) { 
    if(newEvent) { 
    console.dir('newEvent: '+ newEvent); 
    // push a event to the end of the array 
    $scope.events.$add({newEvent}) 
     // display any errors 
     .catch(alert); 
    } 
}; 

In Feuerbasis, sieht die Daten wie folgt:

enter image description here

Der Knoten "newEvent" scheint völlig überflüssig. Ich bin mir nicht sicher, wie ich meine Form und den Controller richtig codiere. Alle Beispiele, die ich im Internet zu finden scheint, verwenden einen Chat-Raum als Beispiel, und das Sendeformular enthält nur ein einzelnes Textfeldfeld.

Ich fand ein Beispiel mit mehr als einem Feld und es zeigte das obige Beispiel, aber wie ich bereits darauf hingewiesen habe, scheint der Knoten "newEvent" nach dem generierten Schlüssel der Firebase redundant zu sein.

Was ist der richtige Weg, um ein Formular mit mehreren Eingabefeldern zu codieren?

Antwort

2

Wenn Sie möchten, wie so die von newEvent und rein eingerichtet, um die Struktur zu befreien:

events 
    push-key 
     random: "random", 
     title: "event title" 
    push-key 
     ... 

Die Änderung, wie Sie $add die Daten:

$scope.events.$add({ title: newEvent.title, random: newEvent.random }) 
// display any errors 
.catch(alert); 

Sie ein Objekt drückt mit die Struktur:

newEvent 
    random: "random", 
    title: "event title" 

welches das gesamte Objekt u nder Taste drücken.

+0

Danke für Ihre Antwort. Es macht jetzt mehr Sinn. Ich habe nicht verstanden, dass ich tatsächlich ein Objekt drängte. Ich habe eine Frage. Eventuell müssen diese "Ereignisse" als Liste angezeigt werden. Sie werden auch einem Benutzer zugeordnet, der das Ereignis erstellt. Zuletzt werden diese nach Titel, Datum und Geo-Koordinaten abgefragt. (Die letzten zwei Eingaben, die ich noch nicht dem Formular hinzugefügt habe.) Gibt es einen Vorteil, das Objekt über das Speichern von Daten unter einer Push-Taste in diesem Szenario zu speichern? – Livi17

+0

Höchstwahrscheinlich nicht für Ihre Veranstaltungen. Wenn Sie jedoch einen Baum haben, der mehrere Instanzen desselben Typs enthalten kann, möchten Sie ihn unter einem Objekt speichern. Wenn Sie garantiert immer nur eine Instanz Ihres Formulars haben (zufällig, Titel usw.), brauchen Sie das übergeordnete Objekt nicht. – theblindprophet