错误错误:Reference.set失败:第一个参数在属性中包含无效的键($ key)

问题描述 投票:2回答:1

我是angular的新手,我正在尝试在angular项目上实现购物车功能。这是添加到购物车的功能:

  async addToCart(product: Productsobj) {
    let cartId = await this.getOrCreateCartId();
    let item$ = this.db.object(
      "/shopping-carts/" + cartId + "/items/" + product.$key
    );
    item$
      .valueChanges()
      .pipe(take(1))
      .subscribe((p: any) => {
        if (p) item$.update({ quantity: p.quantity + 1 });
        else item$.set({ product: product, quantity: 1 });
      });
  }

这里是错误:

core.js:6014错误错误:Reference.set失败:第一个参数在属性'shopping-carts.-Lw2GnUrgt9nMyNKznlW.items.-KrqgOLs07ZkbapP4EGi.product'中包含无效的键($ key)。键必须是非空字符串,并且不能包含“。”,“#”,“ $”,“ /”,“ [”或“]”

我尝试将功能更改为:

  async addToCart(product: Productsobj) {
    let cartId = await this.getOrCreateCartId();
    let item$ = this.db.object(
      "/shopping-carts/" + cartId + "/items/{{product.$key}}"// changed product.$key
    );
    item$
      .valueChanges()
      .pipe(take(1))
      .subscribe((p: any) => {
        if (p) item$.update({ quantity: p.quantity + 1 });
        else item$.set({ product: product, quantity: 1 });
      });
   }

现在得到的错误是:

core.js:6014错误错误:未捕获(承诺):错误:Reference.child失败:第一个参数是无效路径=“ /shopping-carts/-Lw2GnUrgt9nMyNKznlW/items/{{product.$key}}” 。路径必须是非空字符串,并且不能包含“。”,“#”,“ $”,“ [”或“]”

我如何正确解开product.$key

edit:product参数是一个对象:console.log(product)product

javascript angular firebase firebase-realtime-database angularfire
1个回答
0
投票

尝试以下操作:

let key = product["$key"];
let item$ = this.db.object("/shopping-carts/" + cartId + "/items/" + key);

使用方括号访问属性$key。另外,最好将属性$key更改为key

© www.soinside.com 2019 - 2024. All rights reserved.