Добавить массив или объект в документ Firestore - PullRequest
0 голосов
/ 21 сентября 2018

Как добавить массив или объект в документ Firestore?

Я загружаю изображения в документ Firestore, следующий код загружает изображения, но во вложенной коллекции archivos, как я могу загрузить этите же изображения, но в массиве или объекте того же документа, например, в поле imagenes?

Это то, что у меня сейчас есть:

enter image description here


enter image description here

crear-proyecto.component.html

<form #f="ngForm" [formGroup]="forma" (ngSubmit)="cargarImagenes()" novalidate> 

crear-proyecto.component.ts

  forma: FormGroup;
  @ViewChild('f') form; 
  estaSobreElemento = false;
  archivos: FileItem[] = [];
  imagenes: FormArray;

constructor( private fb: FormBuilder, private fs: FirebaseService, public snackBar: MatSnackBar, private storage: AngularFireStorage, public _cargaImagenes: CargaImagenesService ) { 
  this.forma = fb.group ({
    categoria: [ '', Validators.required ],
    cliente: [ '', Validators.required],
    titulo: [ '', Validators.required ],
    textoDestacado: [ '', Validators.required ],
    descripcion: [ '', Validators.required ],
    imagenDestacada: [ '' ],
    fecha: [ firebase.firestore.FieldValue.serverTimestamp() ],
    imagenes: this.fb.array([this.createItem()])
  })
}

createItem(): FormGroup {
  return this.fb.group(this.archivos);
}

cargarImagenes() {
  this._cargaImagenes.cargarImagenesFirebase( this.archivos, this.forma.value );
}

cargar-imagenes.service.ts

fileId = this.db.collection('proyectos').ref.doc().id;
  myFolder = 'archivos';

  constructor(private db: AngularFirestore) { }   
  cargarImagenesFirebase(imagenes: FileItem[], myDataForm) {   
    const storageRef = firebase.storage().ref();   
    for (const item of imagenes) {
      item.estaSubiendo = true;
      if (item.progreso >= 100) {
        continue;
      }

      const uploadTask: firebase.storage.UploadTask =
        storageRef.child(`${this.myFolder}/${item.nombreArchivo}`)
          .put(item.archivo);

      uploadTask.on(firebase.storage.TaskEvent.STATE_CHANGED,
        (snapshot: firebase.storage.UploadTaskSnapshot) =>
          item.progreso = (snapshot.bytesTransferred / snapshot.totalBytes) * 100,
        (error) => console.error('Error al subir', error),
        () => {
          console.log('Imagen cargada correctamente');
          uploadTask.snapshot.ref.getDownloadURL().then((downloadURL) => {
            item.url = downloadURL;
            item.estaSubiendo = false;
            this.guardarImagen({
              nombre: item.nombreArchivo,
              url: item.url
            }, myDataForm);
          });
        });
    }
  }


  guardarImagen( imagen: { nombre: string, url: string }, myDataForm ) {
    const proyecto = this.db.collection('proyectos').doc(`${this.fileId}`);
    proyecto.collection(`${this.myFolder}`).add(imagen);
    proyecto.set(myDataForm)

    console.log(this.fileId)
  }

Есть идеи, как этого добиться?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...