首页 > 解决方案 > Firebase中用于设置数据的困难结构定义

问题描述

在此处输入图像描述

更新: 所以基本上这是我的 firebase 结构,我编辑了 users 集合以创建一个名为 ListaFavorite 的特殊列表,该列表显示用户将在其会话中添加的所有最喜欢的项目。问题是,我必须在原始 UserInterface 文件中定义与 firebase 完全相同的结构。

我声明的 favoriteObj 存储来自项目字段的值并将它们带到 firebase ,但是由于我不能在界面中使用对象,我如何将结构设置为 favoriteObj?

对不起,如果我没有说清楚,但这基本上就是我想要的。

我正在尝试匹配我的结构:

 const favoriteObj = {};
    favoriteObj[uniqID] = {
      favorite_title: favorite_title,
      favorite_description: favorite_description,
      favorite_image: favorite_image,
      favorite_tag: favorite_tag,
      favorite_stoc: favorite_stoc,
      favorite_reducere: favorite_reducere,
      favorite_price: favorite_price,
      favorite_userId: favorite_userId,
      isFavorite: true,
    };

从firebase到我的用户界面是:

export interface User {
  uid: string;
  email: string;
  displayName: string;
  photoURL: string;
  emailVerified: boolean;
  FavoriteID: string;
  SavedFavorite: boolean;
  AddCosID: string;
  SavedCos: boolean;
  ListaFavorite: ... // here i must pass the favoriteObj
}

之后,我必须在函数中包含更新数据:

SetUserData(user) {
    const userRef: AngularFirestoreDocument<any> = this.afStore.doc(
      `users/${user.uid}`
    );

    const userData: User = {
      uid: user.uid,
      email: user.email,
      displayName: user.displayName,
      photoURL: user.photoURL,
      emailVerified: user.emailVerified,
      FavoriteID: null,
      SavedFavorite: null,
      AddCosID: null,
      SavedCos: null,
      ListaFavorite : ...
    };
    return userRef.set(userData, {
      merge: true,
    });
  }

我的观点是将收藏的对象标记到当前用户界面中,然后根据用户登录的收藏页面调用所有对象。我真的不知道如何在那里传递 obj 。有什么帮助吗??

标签: typescriptfirebasegoogle-cloud-firestoreangularfire2

解决方案


要将对象添加到接口,您需要执行所谓的嵌套接口。你应该为 favoriteObj 创建一个接口:

interface FavoriteObj {
      favorite_title: string,
      favorite_description: string,
      favorite_image: string,
      ...
}

然后将其嵌套在用户界面中[key: string],使用我们所说的可索引类型

export interface User {
  uid: string;
  email: string;
  displayName: string;
  photoURL: string;
  emailVerified: boolean;
  FavoriteID: string;
  SavedFavorite: boolean;
  AddCosID: string;
  SavedCos: boolean;
  ListaFavorite: {
       [key: string]: FavoriteObj
  }
}

推荐阅读