Vue.js入門という書籍をやっています。初歩的な質問です。
下記のソースコード内の <div :style="errorMsg"> で合計が1000円以下の時はテキストと線で赤く表示しているのですが、 <div :style="errorMsg"> で「合計が1000円以下」という判定は、どこから来ているのでしょうか?
見た感じだと
canBuy: function () {
return this.totalPrice >= 1000;
},
から判定しているのではないかというのはわかるのですが、なぜ canBuy での判定が自動的に <div :style="errorMsg"> にも反映されるのでしょうか?
もし推測自体も間違っている場合は、ご教示願います。
html
1 <div id="app"> 2 <div :style="errorMsg"> 3 <p>{{ items[0].name}}:{{ items[0].price }} × {{ items[0].quantity }}</p> 4 <p>小計:{{ totalPrice | numSep}}円</p> 5 <p>合計:{{ totalPriceTax | numSep}}円(税込)</p> 6 <p v-show="!canBuy"> 7 {{ 1000 | numSep}}円以上から購入できます。 8 </p> 9 </div> 10 </div>
js
1var items = [ 2 { 3 name: "鉛筆", 4 price: 300, 5 quantity: 4, 6 }, 7 { 8 name: "ノート", 9 price: 400, 10 quantity: 0, 11 }, 12 { 13 name: "消しゴム", 14 price: 500, 15 quantity: 0, 16 }, 17]; 18 19var vm = new Vue({ 20 el: "#app", 21 data: { 22 items: items, 23 }, 24 filters: { 25 numSep: function (value) { 26 if (!value) { 27 return "0"; 28 } 29 return value.toString().replace(/(\d)(?=(\d{3})+$)/g, "$1,"); 30 }, 31 }, 32 computed: { 33 totalPrice: function () { 34 return this.items.reduce(function (sum, item) { 35 return sum + item.price * item.quantity; 36 }, 0); 37 }, 38 totalPriceTax: function () { 39 return Math.floor(this.totalPrice * 1.1); 40 }, 41 canBuy: function () { 42 return this.totalPrice >= 1000; 43 }, 44 errorMsg: function () { 45 return { 46 border: this.canBuy ? "" : "1px solid red", 47 color: this.canBuy ? "" : "red", 48 }; 49 }, 50 }, 51});
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/07/27 01:39