【问题标题】:Difficult structure definition in firebase for setting up dataFirebase中用于设置数据的困难结构定义
【发布时间】:2020-12-05 19:19:19
【问题描述】:

更新: 所以基本上这是我的 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 。有什么帮助吗??

【问题讨论】:

  • 尝试简化您的代码并提供一个最小的工作示例。如果你不努力准备你的问题,不要指望任何人来回答。
  • 您好,感谢您的回答!我更新了我的问题。这就是我可以向您展示的所有可能对您有所帮助的内容。我没有任何工作示例,因为这是我无法运行程序的最后阶段。

标签: typescript firebase google-cloud-firestore angularfire2


【解决方案1】:

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

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

然后使用[key: string]将其嵌套在用户界面中,也就是我们所说的indexable types

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
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    相关资源
    最近更新 更多