Значения не устанавливаются в класс модели в angular7? - PullRequest
0 голосов
/ 21 февраля 2020

Я создаю ecommerce сеть, в которой у меня есть order Model class вот так

import { User } from './user.model';

export class Order {
  constructor(){}
  amount: Number = 0;
  status: String = "";
  date: String = '';
  products: [any];
  userId: String = '';
  user : User;
}

И user модель вот так

export class User{
  name: string = '';
  email: string = '';
  country: string = '';
  city: string = '';
  mobileNumber: string = '';
  address: string = '';
  postalCode : string = '';
  nearBy : string = '';
  _id : string = '';
}

И у меня есть cart.service.ts, в котором я вычисляю order total amount вот так

// Total amount
 public getTotalAmount(): Observable<number> {
    return this.cartItems.pipe(map((product: CartItem[]) => {
    return products.reduce((prev, curr: CartItem) => {
    return prev + curr.product.price * curr.quantity;
    }, 0);
 }));
}

Теперь на моих checkout.component.ts я привязываю значения к order Model класс как этот

isUserLoggedIn: boolean = false;
orderRawData: any;
order: Order;



placeOrder() {
this.cartService.getTotalAmount().subscribe(total=>{
  if (total) {
    console.log('amount : ',total);
    this.order.amount = total;
    this.orderRawData = JSON.parse(localStorage.getItem('cartItem'));
    if (this.isUserLoggedIn) {
      this.order.userId = this.user._id;
    }else{
      this.order.user = this.user;
    }
    this.orderRawData.forEach((item,index)=>{
      this.order.products.push({
        id : item.product._id,
        quantity : item.quantity
      })
    })
    this.order.date = new Date().toLocaleString();
    this.order.status = 'Pending';
    console.log(this.order);
   }
 })

}

Но он дает мне такую ​​ошибку

enter image description here

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Вы объявили order:

order: Order;

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

this.order.amount = total;
//        <--- undefined here

Вы Как-то нужно назначить порядок, например:

this.orderService.getOrder().subscribe(order => {
  this.order = order;
});

Прежде чем вы сможете рассмотреть возможность обновления свойств на нем.

0 голосов
/ 21 февраля 2020

Ваш заказ соответствует формату «Заказ», но не инициализируется.

Вы можете сделать это следующим образом:

1) order: Order = { amount: 0, status: null, .... }

или 2) Обновить Класс заказа как:

export class Order {
    amount: Number;
    status: String;
    ...

    constructor(_amount: Number = 0, _status: String = '', ...) {
        this.amount = _amount;  
        this.status = _status;
        ....
    }
}

В компоненте:

order: Order = new Order();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...