2016-07-19 159 views
1

我是firebase的新手,我不確定我是否正確存儲數據。Firebase中的正確數據結構

我正在構建一個表單來存儲數據。現在它只有2個字段,但是我稍後會添加更多的輸入字段。

我的HTML表單是這樣的:

<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> 

我的控制器看起來是這樣的:

.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); 
    } 
}; 

在火力點,該數據是這樣的:

enter image description here

「newEvent」節點看起來完全是多餘的。我不確定如何正確編寫我的表單和控制器。我似乎在互聯網上找到的所有示例都以聊天室爲例,發送表單只包含一個textarea字段。

我確實找到了一個有多個字段的例子,它顯示了上面的例子,但是正如我指出的那樣,在firebase生成密鑰之後,「newEvent」節點似乎是多餘的。

代碼具有多個輸入字段的表單的正確方法是什麼?

回答

2

如果你想擺脫newEvent和純粹建立結構爲這樣:

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

的變化如何$add數據:

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

你是推一個物體結構:

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

哪個會插入整個對象u按下按鍵。

+0

感謝您的回答。現在它更有意義。我不明白我實際上是在推一個物體。我確實有一個問題。最終,這些「事件」將需要顯示爲列表。他們也將與創建該事件的用戶相關聯。最後,將以標題,日期以及地理座標來查詢。 (我還沒有添加到表單中的最後兩個輸入。)在這種情況下,將對象存儲在按鍵之下存儲數據是否有優勢? – Livi17

+0

很可能不適合您的活動。但是如果你有一棵樹可以包含多個相同類型的實例,那麼你想要存儲在一個對象下面。如果你保證只有**表單的一個**實例(隨機,標題等),那麼你不需要父對象。 – theblindprophet