[英]Formatting a number using a computed property with .toLocaleString() doesn't work
我有一個range
輸入元素,它使用v-model
綁定到amount
數據屬性。 我有另一個<p></p>
元素,它顯示從計算屬性返回的格式化數量,但問題是,數字沒有被格式化。
12,000
我所看到的
12000
new Vue({ el: "#app", data: { amount: 0 }, computed: { formattedAmount(){ return this.amount.toLocaleString() } } })
body { background: #20262E; padding: 20px; font-family: Helvetica; } #app { background: #fff; border-radius: 4px; padding: 20px; transition: all 0.2s; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <h2>Range Formatter</h2> <p>{{formattedAmount}}</p> <input type="range" id="range" v-model="amount" min="0" max="1000000"> </div>
當前,您正在對字符串而不是數字調用toLocaleString
,因此它不會應用您期望的格式。 您需要將number
修飾符添加到您的v-model
。
v-model.number="amount"
默認情況下,所有<input>
元素都會發出字符串值,即使在您可能期望數字的情況下也是如此。 number
修飾符告訴 Vue 在更新綁定屬性之前將字符串轉換為數字。
new Vue({ el: "#app", data: { amount: 0 }, computed: { formattedAmount() { return this.amount.toLocaleString() } } })
body { background: #20262E; padding: 20px; font-family: Helvetica; } #app { background: #fff; border-radius: 4px; padding: 20px; transition: all 0.2s; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <h2>Range Formatter</h2> <p>{{formattedAmount}}</p> <input type="range" id="range" v-model.number="amount" min="0" max="1000000"> </div>
這里的問題是this.amount
實際上返回一個字符串。 您需要先將其轉換為數字,例如:
formattedAmount() {
return Number(this.amount).toLocaleString();
}
new Vue({ el: "#app", data: { amount: 0 }, computed: { formattedAmount() { return Number(this.amount).toLocaleString() } } })
body { background: #20262E; padding: 20px; font-family: Helvetica; } #app { background: #fff; border-radius: 4px; padding: 20px; transition: all 0.2s; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <h2>Range Formatter</h2> <p>{{formattedAmount}}</p> <input type="range" id="range" v-model="amount" min="0" max="1000000"> </div>
或者,使用.number
修飾符將用戶輸入更改為自動類型轉換為Number
,例如:
<input v-model.number="amount" type="range" id="range" min="0" max="1000000">
new Vue({ el: "#app", data: { amount: 0 }, computed: { formattedAmount() { return this.amount.toLocaleString() } } })
body { background: #20262E; padding: 20px; font-family: Helvetica; } #app { background: #fff; border-radius: 4px; padding: 20px; transition: all 0.2s; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script> <div id="app"> <h2>Range Formatter</h2> <p>{{formattedAmount}}</p> <input type="range" id="range" v-model.number="amount" min="0" max="1000000"> </div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.