Как избежать toFixed, когда значение не определено или задержка ответа на это значение - PullRequest
0 голосов
/ 06 мая 2019

Я вижу эту ошибку в моей консоли:

isNaN (...). ToFixed не является функцией

Вот часть кода HTML, который яЯ пишу с Vue.js:

<v-flex xs3 class="text-lg-right" 
    v-for="(mrp, index) in [medicine.orderedMedView.combinations[combinationIndex]]" :key="index">
    <div class="primary-header-font">
        &#8377; {{ isNaN((mrp && (mrp.totalPrice - (mrp.totalPrice * (medicine.discountPercentage / 100))))).toFixed(2) ?
        0 :  
        (( mrp && mrp.totalPrice - (mrp.totalPrice * (medicine.discountPercentage / 100)))).toFixed(2) || 0 }} &nbsp;
    </div>
    <span v-if="mrp && mrp.totalPrice != NaN" class="secondary-header-font">
        {{ medicine.discountPercentage }}% 
    </span>
    <span v-if="mrp && mrp.totalPrice != NaN" class="secondary-header-font strike-through">
        &#8377; {{ mrp && mrp.totalPrice && (mrp.totalPrice).toFixed(2) || 0 }} &nbsp;
    </span>
</v-flex>

Я предполагаю, что в моем состоянии медицины, когда я использую это, ответ задерживается ... так что, возможно, именно поэтому он говорит "не функция".Как я могу это исправить?

Ответы [ 3 ]

1 голос
/ 06 мая 2019

isNaN - это функция для проверки, является ли предоставленное значение числовым или нет. Возвращаемое значение true или false. Следовательно, вы не можете использовать функцию toFixed для возвращаемого значения isNaN.

Попробуйте изменить скобки, чтобы toFixed было после числа.

0 голосов
/ 06 мая 2019

В vue вы бы предпочли использовать метод для такого рода утверждений.

Я думаю, это одна из причин, почему вы пропустили toFixed(2) в первом троичном выражении.

Такв методе вы можете представить что-то вроде:

price(mrp) {
   let price = mrp && (mrp.totalPrice - (mrp.totalPrice * (this.medicine.discountPercentage / 100));
   return isNaN(price) ? 0 : price;
}

И в вашем шаблоне:

<v-flex xs3 class="text-lg-right" 
    v-for="(mrp, index) in [medicine.orderedMedView.combinations[combinationIndex]]" :key="index">
    <div class="primary-header-font">
        &#8377; {{ price(mrp) }} &nbsp;
    </div>
    <span v-if="mrp && mrp.totalPrice != NaN" class="secondary-header-font">
        {{ medicine.discountPercentage }}% 
    </span>
    <span v-if="mrp && mrp.totalPrice != NaN" class="secondary-header-font strike-through">
        &#8377; {{ mrp && mrp.totalPrice && (mrp.totalPrice).toFixed(2) || 0 }} &nbsp;
    </span>
</v-flex>

Если вы хотите избежать какой-либо проверки, вы всегда можете использовать v-if="medicine" на v-flex так что никакое значение не вычисляется, пока не будет заполнено лекарство.

0 голосов
/ 06 мая 2019

проверьте переменную isNaN перед выполнением toFixed.как следующий образец фрагмента

var a=10.898978
console.log(!isNaN(a)?a.toFixed(2):0)
...