2016-07-19 113 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