#angular
#angular
Вопрос:
Я пытаюсь получить доступ к переменной в модальном компоненте, но всегда получаю сообщение об ошибке Property null toFixed() can't be applied
, хотя переменная уже была успешно инициализирована несколькими строками ранее. Это конкретный шаблон:
<app-card [hidden]=true>
<h2>Überblick</h2>
<div *ngIf="buyingArticles.length > 0">
<h3>Artikel zum Kauf</h3>
<ul>
<li *ngFor="let article of buyingArticles">
Anzahl: {{article.initialQuantity}}
Beschreibung: {{article.title}}
Preis: {{(article.initialQuantity * article.price).toFixed(2)}} €
</li>
</ul>
<h4>Gesamt: {{calculateTotalPrice(buyingArticles).toFixed(2)}} €</h4>
</div>
<div *ngIf="retourningArticles.length > 0">
<h3>Artikel zur Retoure</h3>
<ul>
<li *ngFor="let article of retourningArticles">
Anzahl: {{article.initialQuantity}}
Beschreibung: {{article.title}}
Preis: {{(article.initialQuantity * article.price).toFixed(2)}} €
</li>
</ul>
<h4>Gesamt: {{calculateTotalPrice(retourningArticles).toFixed(2)}} €</h4>
</div>
<h2>Zu zahlen: {{state.adjustedPrice.toFixed(2)}} €</h2>
<div class="buttons">
<button (click)="changeStep('scanner')">Weiteren Artikel scannen</button>
<button (click)="changeStep('payment')">Bezahlung</button>
<button (click)="showModal = true; state.adjustedPrice=state.totalPrice">Preis anpassen</button>
</div>
</app-card>
<div *ngIf="showModal" class="modal">
<div class="modal-content">
<button (click)="showModal = false">x</button>
<h1>Preis anpassen</h1>
<h2>{{state.adjustedPrice.toFixed(2)}}€</h2>
<button (click)="calculateDiscount(0.1)">-10%</button>
<button (click)="calculateDiscount(0.2)">-20%</button>
<button (click)="calculateDiscount(0.3)">-30%</button>
<button>Abrunden</button>
<button (click)="showModal=false; calculateEndSum(calculateTotalPrice(buyingArticles), calculateTotalPrice(retourningArticles))">Bestätigen</button>
</div>
</div>
Как я уже говорил ранее, первое {{state.adjustedPrive.toFixed(2)}}
выражение компилируется надлежащим образом, но второе всегда выдает одну ошибку: невозможно прочитать свойство ‘toFixed’ null. И я не знаю почему.
Код из соответствующего ts-файла:
import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { Article } from 'src/app/model/article';
@Component({
selector: 'app-overview',
templateUrl: './overview.component.html',
styleUrls: ['./overview.component.css']
})
export class OverviewComponent implements OnInit {
@Input() buyingArticles: Array<Article>;
@Input() retourningArticles: Array<Article>;
@Output() upcomingStep = new EventEmitter<string>();
//@Output() totalPrice = new EventEmitter<number>();
//@Output() adjustedPrice = new EventEmitter<number>()
@Output() total = new EventEmitter<Object>();
showModal: boolean = false;
adjustedPrice: number;
totalPriceBuyingArticles: number;
totalPriceRetourningArticles: number;
state = {
totalPrice: null,
adjustedPrice: null,
difference: null,
discount: []
}
changeStep(upcomingStep: string): void {
this.upcomingStep.emit(upcomingStep);
}
calculateDiscount(amount: number): void {
this.state.adjustedPrice = this.state.totalPrice * (1 - amount);
//this.state.totalPrice = this.state.adjustedPrice;
this.state.difference = this.state.totalPrice - this.state.adjustedPrice;
this.state.discount.push(amount.toString());
}
calculateTotalPrice(arrayToSumUp: Array<Article>): number {
let totalPrice: number = 0;
arrayToSumUp.forEach(article => {
totalPrice = totalPrice article.price * article.initialQuantity;
});
return totalPrice;
}
calculateEndSum(): void {
this.state.adjustedPrice = this.calculateTotalPrice(this.buyingArticles) - this.calculateTotalPrice(this.retourningArticles) - this.state.difference;
if(this.state.discount.length = 0){
this.state.totalPrice = this.state.adjustedPrice;
}
//this.state.adjustedPrice = this.state.totalPrice;
this.total.emit(this.state);
//return this.state.totalPrice.toFixed(2);
}
constructor() { }
ngOnInit() {
this.calculateEndSum();
}
}
Кто-нибудь знает, что я делаю не так?
Большое вам спасибо!
Комментарии:
1. Я думаю, что это просто орфографическая ошибка в шаблоне
adjustedPrive
, которая должна быть скорректирована по цене!2. Да, я подумал то же самое, но я не могу найти adjustedPrive, как вы говорите. Где вы это читаете?
3. можете ли вы создать пример stackblitz, чтобы мы могли точно увидеть, в чем проблема? stackblitz.com Как и в вашем примере, я не понимаю, в чем заключается ошибка.
4. Вы должны использовать в своем шаблоне state.adjustedPrice? .Исправлено (2). Когда переменная не будет равна null, будет вызван метод
5. Да, я создам пример stackblitz для вас, чтобы показать.