2016-12-07 232 views
0

我正在使用AngularFire2作为Ionic 2的提供者。我正在制作一个基本列表应用程序。以下是我在Firebase中的数据。Ionic 2&Angularfire2 + Firebase

{ 
    "Checklists" : { 
    "0" : { 
     "title" : "new List" 
    }, 
    "-KYHODAYcQ4OKMAzcXSG" : { 
     "items" : [ { 
     "checked" : "false", 
     "title" : "Milk" 
     } ], 
     "title" : "Newest List" 
    }, 
    "-KYHS654NUHiwkexMwhL" : { 
     "items" : [ { 
     "checked" : "false", 
     "title" : "asdfadf" 
     } ], 
     "title" : "ddddd" 
    } 
    } 
} 

我有这一切拉好在我的家庭观点和更新每个清单没有问题的标题。我在我的数据提供者类中使用此代码检索数据,然后在我的home.ts中调用它。顺便说一句,这很好。

this.checklists = angFire.database.list('/Checklists'); 

当我导航到我的应用程序中的新视图时,问题出现了。因此,我使用此代码移动到清单项目视图并传递当前清单。

this.checklist = this.navParams.get('checklist'); 

所以现在,在清单项来看,我把目前的检查表的参考与标题,如果清单有这些项目一起。如果我已经在Firebase中使用它们,则此工作正常。

问题是如何将项目或项目数组添加到其中一个清单(如果它不存在于Firebase中)。我可以这样做,在该视图现在没有问题,

if(this.checklist.items && this.checklist.items.length > 0){ 
    this.checklist.items.push({title: data.name, checked:"false"}); 
}else{ 
    this.checklist.items = [{title: data.name, checked:"false"}]; 
    console.log(this.checklist); 
} 

这是当我想将它更新到,我遇到一个问题火力地堡。我可以通过在我的数据提供程序中执行此操作来使用初始数组项目更新一个清单。

this.checklists.update(id, {items: [ 
     { 
      title: itemTitle, 
      checked: "false" 
     } 
    ]}); 

但是这会覆盖已经存在的任何东西。

我需要获得对当前清单的引用,看看是否有一个项目数组,但我找不到任何文档。我试过裁判,但那不行。任何帮助都会很棒。谢谢。

回答

0

所以我最终得到它的工作,但不知道如果这是正确的方式来做到这一点。在清单项查看我添加项目到当前checklist.items阵列通过这样

**this is the checklist-items view** 
if(this.checklist.items && this.checklist.items.length > 0){ 
    this.checklist.items.push({title: data.name, checked:"false"}); 
}else{ 
    this.checklist.items = [{title: data.name, checked:"false"}]; 
    console.log(this.checklist); 
} 

然后我打电话添加的功能和项目在我的数据提供程序类,并将其发送具有整个清单整个项目数组。

this.data.addItem(this.checklist); 

然后在我的数据提供者,我只是在我的数据提供者类这样覆盖当前清单整个项目阵列。

**this is the data-provider view** 
addItem(checklist):void { 
    let checklistId = checklist.$key; 

    this.checklists.update(checklistId, {items: checklist.items}); 
} 

这有效,但就像我说的不知道它是否是正确的方式。

0

我建议不要使用数组来存储数据。数组存储为具有整数作为键名称的对象。这些整数不可靠,因为它们不是永久密钥。如果数组中的项目被删除,则提交整个数组,并且项目将具有新的整数键。

建议的数据结构:

checklist 
    -key 
     items 
      -itemKey 
       name: "milk" 
       checked: true 
      -itemKey 
       name: "bread" 
       checked: false  
      -itemKey 
       name: "sugar" 
       checked: true   
     title: "newest list" 
相关问题