动态将集合添加到子集合中(或从子集合中获得唯一的ID?)

时间:2019-08-06 13:29:26

标签: angular firebase ionic-framework google-cloud-firestore

我试图将新的集合动态添加到现有子集合中的文档中。

Firebase代码:

userProfile(Collection)
|
user(document)
  |
 list(Collection)
  |
 list1(document),list2......

我想创建一个新的集合“任务”,希望用户可以在特殊列表(例如list1)页面上添加一个任务,然后将特定任务添加到list1的文档中,如果他们在list2中这样做页面。

我有两种方案,第一种方案是获取不同列表的唯一ID,然后使用collection()和doc(),但它不能以我的方式起作用。 这是task.ts中的代码:

import { Injectable } from '@angular/core';
import * as firebase from 'firebase/app';
import 'firebase/auth';
import 'firebase/firestore';
import {ListDetailPage} from "../../pages/list-detail/list-detail.page"
import { ListService } from '../../services/list/list.service';
import { ActivatedRoute } from '@angular/router';

@Injectable({
  providedIn: 'root'
})

export class TaskService {
 public taskRef: firebase.firestore.CollectionReference;
 public currentList :any = {};
 public listId = this.route.snapshot.paramMap.get('id');

 constructor(private route:ActivatedRoute,) {

  this.loadTaskRef(this.currentList);

  firebase.auth().onAuthStateChanged(list => {
    this.loadTaskRef(this.listId);
  });


 }

  loadTaskRef(listId:any): void{
      if(listId){
        this.taskRef = firebase
        .firestore()
        .collection("/list-detail/").doc(this.listId)
        .collection("/task");
      }
   }

第二个计划是在用户(文档)后面创建任务集合,然后分配不同列表的ID。但是,仍然要求我获取ID,对此我感到困惑。

有人可以给我一些建议吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

我现在正在做的事情是将添加任务方法放在list.ts上:

functions.php

这是我html的相关代码:

import { Component, OnInit } from '@angular/core';
import { ListService } from '../../services/list/list.service';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-list-detail',
  templateUrl: './list-detail.page.html',
  styleUrls: ['./list-detail.page.scss'],
})
export class ListDetailPage implements OnInit {
  public listId :string;
  public currentList: any = {}; 
  public taskName = '';
  public taskDate = '';
  public taskNote ='';

  constructor(
    private listService:ListService,
    private route:ActivatedRoute,
    ) { }

  ngOnInit() {

    this.listId = this.route.snapshot.paramMap.get('id');

    this.listService
    .getlistDetail(this.listId)
    .get()
    .then(listSnapshot => {
      this.currentList = listSnapshot.data();
      this.currentList.id = listSnapshot.id;
  });
}

 addTask(
  taskName:string,
  taskDate:string,
  taskNote:string,
 ):void{
   this.listService.addTask(
     taskName,
     taskDate,
     taskNote,
     this.currentList.id
   )
   .then(() => this.taskName='')
   .then(() => this.taskDate='')
   .then(() => this.taskNote='')
 }
}