Wira Xie
Wira Xie

Reputation: 839

Error, Reference.push failed: first argument contains undefined in property

I'm new with firebase database and I'm currently trying to push data into my firebase database, but got an error like this Error: Reference.push failed: first argument contains undefined in property 'Product.prdName'

//insert data function in service.ts
insertProduct(Product: Product) {
  this.productList.push({
    prdName: Product.prdName,
    prdCat: Product.prdCat,
    prdSup: Product.prdSup,
  });
}

//onsubmit function in component.ts  
productList: Product[];

constructor(private productService: ProductService) {}

onSubmit(form: NgForm) {
  if (form.value.$key == null) {
    this.productService.insertProduct(form.value);
  } else {
    this.productService.updateProduct(form.value);
  }
  this.resetForm(form);
}

//class.ts
export class Product {
  $key: string;
  prdName: string;
  prdCat: string; //category
  prdSup: string; //supplier
}

<!--form snipped-->

<form #productForm="ngForm" (ngSubmit)="onSubmit(productForm)">
  <input type="hidden" name="$key" #$key="ngModel" [(ngModel)]="productService.selectedProduct.$key">
  
  <div class="form-group">
    <label>Product Name</label>
    <input class="form-control" name="name" #name="ngModel" [(ngModel)]="productService.selectedProduct.prdName" placeholder="Full Name">
  </div>

  <div class="form-group">
    <button type="submit" class="btn btn-primary" (onclick)="">Submit</button> 
  </div>
</form>

Can somebody help me, please?

please let me know if more snippets are needed. Thanks in advance.

Upvotes: 0

Views: 8240

Answers (1)

Vivek Doshi
Vivek Doshi

Reputation: 58593

You are passing onSubmit(productForm) , so you will get output like

{
  $key : value of productService.selectedProduct.$key
  name : value of productService.selectedProduct.prdName
}

What you can do is

EITHER CHANGE

Value of name property of input to same as Product class like name='name' to name='prdName'

OR

this.productService.insertProduct(form.value);

to

this.productService.insertProduct(this.productService.selectedProduct);

Upvotes: 1

Related Questions