我试图将新的集合动态添加到现有子集合中的文档中。
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,对此我感到困惑。
有人可以给我一些建议吗?非常感谢。
答案 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='')
}
}