Я использую Angular 18 с сигналами.
My ClosterService < /code> в основном вычисляет цену на основе некоторых параметров.
Строительство с NG Serv < /code> не устраивает никаких ошибок и не делает VSCODE, однако мой браузер бросает следующее: < /p>
ERROR TypeError: this.doorAmount is not a function at Object.calculatePricePerDoor [as computation] (calculation.service.ts:52:48)
< /code>
и мой компонент не загружен.import { computed, Injectable, signal } from '@angular/core';
import {
basePrice,
basePricePerDay,
basePricePerDoor,
minutesPerDoor,
stepPrice,
} from '../consts';
@Injectable({
providedIn: 'root',
})
export class CalculationService {
#price = signal(0);
#basicDoorAmount = signal(0);
#electroDoorAmount = signal(0);
#automaticDoorAmount = signal(0);
doorAmount = computed(this.countDoorAmount);
price = computed(this.#price);
pricePerDoor = computed(this.calculatePricePerDoor);
priceStep = computed(this.calculatePriceStep);
hours = computed(this.countHours);
days = computed(this.countDays);
constructor() {
this.calculatePrice();
}
calculatePrice() {
this.#price.set(
basePrice +
this.pricePerDoor() +
basePricePerDay * this.days() +
this.priceStep()
);
}
setBasic(amount: number) {
this.#basicDoorAmount.set(amount);
}
setElectro(amount: number) {
this.#electroDoorAmount.set(amount);
}
setAutomatic(amount: number) {
this.#automaticDoorAmount.set(amount);
}
private calculatePricePerDoor() {
const { basic, electro, automatic } = this.doorAmount();
return (
basic * basePricePerDoor.basic +
electro * basePricePerDoor.electro +
automatic * basePricePerDoor.automatic
);
}
private calculatePriceStep() {
const { basic } = this.doorAmount();
if (basic < 21) return 0;
if (basic < 101) return stepPrice[100];
if (basic < 251) return stepPrice[250];
if (basic < 1001) return stepPrice[1000];
return stepPrice[1001];
}
private countDoorAmount() {
return {
basic: this.#basicDoorAmount(),
electro: this.#electroDoorAmount(),
automatic: this.#automaticDoorAmount(),
};
}
private countHours() {
const { basic, electro, automatic } = this.doorAmount();
return (
(basic * minutesPerDoor.basic +
electro * minutesPerDoor.electro +
automatic * minutesPerDoor.automatic) /
60
);
}
private countDays() {
return Math.ceil(this.countHours() / 7.5);
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... a-function
Angular 18 рассчитал не функцию ⇐ Javascript
Форум по Javascript
1745403280
Anonymous
Я использую Angular 18 с сигналами.
My ClosterService < /code> в основном вычисляет цену на основе некоторых параметров.
Строительство с NG Serv < /code> не устраивает никаких ошибок и не делает VSCODE, однако мой браузер бросает следующее: < /p>
ERROR TypeError: this.doorAmount is not a function at Object.calculatePricePerDoor [as computation] (calculation.service.ts:52:48)
< /code>
и мой компонент не загружен.import { computed, Injectable, signal } from '@angular/core';
import {
basePrice,
basePricePerDay,
basePricePerDoor,
minutesPerDoor,
stepPrice,
} from '../consts';
@Injectable({
providedIn: 'root',
})
export class CalculationService {
#price = signal(0);
#basicDoorAmount = signal(0);
#electroDoorAmount = signal(0);
#automaticDoorAmount = signal(0);
doorAmount = computed(this.countDoorAmount);
price = computed(this.#price);
pricePerDoor = computed(this.calculatePricePerDoor);
priceStep = computed(this.calculatePriceStep);
hours = computed(this.countHours);
days = computed(this.countDays);
constructor() {
this.calculatePrice();
}
calculatePrice() {
this.#price.set(
basePrice +
this.pricePerDoor() +
basePricePerDay * this.days() +
this.priceStep()
);
}
setBasic(amount: number) {
this.#basicDoorAmount.set(amount);
}
setElectro(amount: number) {
this.#electroDoorAmount.set(amount);
}
setAutomatic(amount: number) {
this.#automaticDoorAmount.set(amount);
}
private calculatePricePerDoor() {
const { basic, electro, automatic } = this.doorAmount();
return (
basic * basePricePerDoor.basic +
electro * basePricePerDoor.electro +
automatic * basePricePerDoor.automatic
);
}
private calculatePriceStep() {
const { basic } = this.doorAmount();
if (basic < 21) return 0;
if (basic < 101) return stepPrice[100];
if (basic < 251) return stepPrice[250];
if (basic < 1001) return stepPrice[1000];
return stepPrice[1001];
}
private countDoorAmount() {
return {
basic: this.#basicDoorAmount(),
electro: this.#electroDoorAmount(),
automatic: this.#automaticDoorAmount(),
};
}
private countHours() {
const { basic, electro, automatic } = this.doorAmount();
return (
(basic * minutesPerDoor.basic +
electro * minutesPerDoor.electro +
automatic * minutesPerDoor.automatic) /
60
);
}
private countDays() {
return Math.ceil(this.countHours() / 7.5);
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79588340/angular-18-computed-not-a-function[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия