Использование двух сервисов в одном компоненте в приложении ionic4 / angular crud с firebase - PullRequest
0 голосов
/ 18 апреля 2020

У меня проблема с приложением ionic4 / angular crud с firebase, которое я разрабатываю. Приложение основано на домашнем приложении, которое, когда участники входят в систему, у них есть выбор либо выбрать свой дом из списка, либо добавить новый дом. После того, как они выбрали свой дом, они попадают на домашнюю страницу. Это было сделано через службу под названием домашний сервис. Одна часть приложения - это todolist для домашнего хозяйства, но у меня возникают проблемы с тем, чтобы мой todoservice взаимодействовал с моим обслуживанием по домам, чтобы todolist относился к дому, выбранному пользователем. делаю это неправильно (я знаю, что я получаю ошибки в консоли!). Любое руководство будет очень полезным. Поскольку я продолжаю получать пару ошибок, когда я пытаюсь добавить задачу. Нужна ли мне домашняя служба в моем todoservice для того, чтобы она была относительно домашней коллекции на базе firebase или был бы другой путь вокруг нее

import { Injectable } from '@angular/core';
import { promise } from 'protractor';
import { DocumentReference, AngularFirestore, AngularFirestoreCollection } from '@angular/fire/firestore';
import { HouseService, House } from './house.service';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import {Todolist} from '../modal/Todolist';





@Injectable({
providedIn: 'root'
})
export class TodoserviceService {
  private houses: Observable<House[]>;
  private houseCollection: AngularFirestoreCollection<House>;
  private todolist: Observable<Todolist[]>;
  private todolistCollection: AngularFirestoreCollection<Todolist>;

  constructor(houseService : HouseService,
    private afs: AngularFirestore) {
      this.houseCollection = this.afs.collection<House>('house');
      this.houses = this.houseCollection.snapshotChanges().pipe(
        map(actions => {
          return actions.map(a => {
            const data = a.payload.doc.data();
            const id = a.payload.doc.id;
            return { id, ...data };
          });
        })
      );
     }


     //Function to retrieve all collection data for house

     getAllTodolist(id : string){
      this.todolistCollection = this.afs.collection('house').doc(id).collection<Todolist>('todo list');
      this.todolist = this.todolistCollection.snapshotChanges().pipe(
        map(actions => {
         return actions.map(a => {
           const data = a.payload.doc.data();
           return { id, ...data};
          });
        })
      );
     return this.todolist;
   }

    gettodolist(): Observable<Todolist[]>{
      return this.todolist

    }



        //
    //HAVING .COLLECTION('todo').ADD - IF THERE IS NO COLLECTION IT WILL CREATE ONE, IF THERE IS IT WILL ADD TO IT
    addTodolist(id: string, todolist: Todolist,  ): Promise<DocumentReference>{
      return this.houseCollection.doc(id).collection('todo list').add(todolist);
    }


    updateTodolist(todolist: Todolist,id:string): Promise<void>{
      return this.houseCollection.doc(id).collection<Todolist>("todo list").doc(id).update({title: todolist.title, description: todolist.description, last_date: todolist.last_date });

    }

    deleteTodolist(id: string): Promise<void> {
      return this.houseCollection.doc(id).collection<Todolist>("todo list").doc(id).delete();
    }

  }


    import { Component, OnInit } from '@angular/core';
import { NavController } from '@ionic/angular';
import { ToastController } from '@ionic/angular';
import { House, HouseService } from '../Services/house.service';
import { ActivatedRoute, Route, Router } from '@angular/router';
import { TodoserviceService } from '../Services/todoservice.service';
import { AngularFirestore } from '@angular/fire/firestore';
import { map } from 'rxjs/operators';
import { Todolist } from '../modal/Todolist';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-add-todo',
  templateUrl: './add-todo.page.html',
  styleUrls: ['./add-todo.page.scss'],
})



export class AddTodoPage implements OnInit {
  todolist: Todolist = {
    title: '',
    description: '',
    last_date: '',
  }

  currentHouse: House;
  currentHouseId: string;

  constructor(private activatedRoute: ActivatedRoute,
    private router: Router,
    private route: Router, private navCtrl: NavController,
    private toastCtrl: ToastController, private todoserviceService: TodoserviceService,
    private houseService: HouseService) {

  }
  ngOnInit() {

    let id1 = this.route.url.split('id=');
    let id2 = id1[1].toString();
    let id3 = id2.split('/');
    let id = id3[0].toString();
    this.houseService.getHouse(id);
    if (id) {
      this.houseService.getHouse(id).subscribe(house => {
        this.currentHouse = house;
        this.currentHouseId = id;
      });
      console.log(this.currentHouseId)
    }
  }



  addTodolist() {
    this.todoserviceService.addTodolist(this.currentHouseId, this.todolist).then(() => {
      this.router.navigateByUrl('/');
    }, err => {

    });
  }
}

Ошибка консоли Google

...