Создайте цикл for внутри функции create firebase collection - PullRequest
0 голосов
/ 28 октября 2019

Я создаю приложение для еды с Ionic (4) / Angular, которое может работать с несколькими магазинами и использует FireBase. Но у меня есть проблема. Я создаю новый заказ, например, так:

add(stores: Array<CartStore>, address: string) {
 this.afs.collection<Order>('orders').add({
          userId: this.userId,
          address: address,
          items: stores.items,
          store: {
            id: stores.id,
           name: stores.name,
          }
        });     
      }

Чтобы создать ОДИН ОДИН ОДИН заказ, мне нужно использовать цикл for, подобный так внутри функции выше

 for(let i in stores){
items: stores[i].items,
          store: {
            id: stores[i].id,
           name: stores[i].name,
          }
}

Но это невозможно внутриФункция сбора Firebase ... Arghhh!

Затем,

Вот как работает мое приложение:

Нажав на кнопку оформления заказа

this.orderProvider.add(this.cart.stores, this.address);

Мои модели:

Cart.ts

import { CartStore } from "./cart-store";

export class Cart {
  id?: string;
  userId: string;
  total: number;
  stores: Array<CartStore>;
}

Order.ts

import { CartStore } from "./cart-store";

export class Order {
  id?: string;
  userId: string;
  total?: number;
  address: string;
  status?: string;
  orderNumber?: string;
  createdAt?: number;
  updatedAt?: number;
  store: CartStore;
  items: Array<CartStore>;
  isReviewed?: boolean;
}

Cart-Store.ts

import { CartItem } from './cart-item';

export class CartStore {
  id?: string;
  name: string;
  subTotal?: number;
  items?: Array<CartItem>;

  constructor() {
  }
}

Cart-Item.ts


import { Variation } from "./variation";
import { ItemReview } from "./item-review";
import { Size } from "./size";

export class CartItem {
  id?: string;
  name: string;
  price: number;
  quantity: number;
  thumbnail: string;
  variations: Array<Variation>;
  size: Size;
  subTotal: number;
  review?: ItemReview;

  constructor() {
  }
}

Спасибо за помощь! Я начинаю в этом домене.

Ответы [ 3 ]

0 голосов
/ 29 октября 2019

Я пытался сделать это

add(stores: Array<CartStore>, address: string) {
    for (let i in stores) {
      if (stores[i] && stores[i].items && stores[i].items.length) {
        this.afs.collection<Order>('orders').add({
          userId: this.userId,
          address: address,
          items: stores[i].items,
          store: {
            id: stores[i].id,
            name: stores[i].name
          }
        });
      }
    }
  }

Но это создает заказ на несколько человек (для каждого предмета) вместо того, чтобы создавать один заказ со всеми предметами.

0 голосов
/ 29 октября 2019

Это мой store.service.ts

import { Injectable } from '@angular/core';
import { AngularFirestore } from 'angularfire2/firestore';
import { Store } from '../models/store';
import {map} from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class StoreService {

  constructor(public afs: AngularFirestore) {

  }

  all() {
    return this.afs.collection<Store>('stores/').snapshotChanges().pipe(map(actions => {
      return actions.map(a => {
        const data = a.payload.doc.data() as Store;
        const id = a.payload.doc.id;
        return {id, ...data};
      });
    }));
  }

  get(id: string) {
    return this.afs.doc('stores/' + id).valueChanges();
  }
}


А это мой store.ts

export class Store {
  id?: string;
  name: string;
  address: string;
  itemCount?: number;
  rateCount?: number;
  rating?: number;

  constructor() {
  }
}

У меня есть 2 приложения, которые связаны с одной и той же базой данных, однодля клиентов, другой для администраторов (учетная запись магазина). Я заметил, что у меня есть только одна учетная запись администратора в firebase.

0 голосов
/ 29 октября 2019

Вы можете использовать для цикла:

add(stores: Array<CartStore>, address: string) {
    for (const store of stores) {
      if (store && store.items && store.items.length) {
        this.afs.collection<Order>('orders').add({
          userId: this.userId,
          address: address,
          items: store.items,
          store: {
            id: store.id,
            name: store.name
          }
        });
      }
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...