子から親にデータを渡す | Pass data from child to parent
子から親へはハンドラを介して$emit()で渡す | Pass from child to parent via $ emit () via handler
- 400円以上の商品なら「値下げする」ボタンをクリックするたび50円ずつ値下げする。| For products over 400 yen, the price will be reduced by 50 yen each time you click the "Reduce price" button.
- 400円までしか値下げしない。| The price will only be reduced to 400 yen.
実際の描画 | Actual drawing
「子コンポーネント(my-product.js) | Child component (my-product.js)」
Vue.component('my-product',{//(1) ボタンがクリックされたら子コンポーネントの「clickHandler」を呼び出す
template:`
<div>
<button v-on:click="clickHandler">値下げする</button>{{price}}円
</div>`,
props: ['price'],
methods: {
// (2) ボタンのクリックイベントハンドラ
clickHandler: function(){
var discount = 0;
if(this.price -50 < 400){
// 例)現在の価格が430円の場合、値下げ幅は30円
discount = this.price - 400;
}else {
// 例)現在の価格が450円以上の場合、値下げ幅は50円
discount = 50;
} //(3) 子コンポーネントに「child-click」イベントを発生させる
this.$emit('child-click', discount);
}}
});
親のテンプレート(main.html) | Parent template (main.html)
<div id="app">//(4)子に「child-click」イベントが発生したら親の「priceDowm」を呼び出す
<my-product v-on:child-click="priceDown" v-bind:price="price"></my-product>
</div>
親のコンポーネント(main.js)
var app = new Vue({el: '#app',
data: {
price: 980
},
methods: {
// (5)子から呼び出されるメソッド
priceDown: function(discount){
// 値下げ幅が指定されていない場合は100円とするif(discount == undefined) discount = 100 ;
//値下げする
this.price -= discount;
}}
});
この本を参考に学び、完成させることができました。しかし、プログラミング初心者の私が詳しく解説することは、おこがましく、難しく出来ません(ToT) その点、この本では丁寧な解説が載っていますので、解説とともにコードを書き、完成させればより深く学ぶことができます(^.^) 身に付けて消えないスキルがこの値段。買っておいてよかったです。
やっぱりプロの人から直接学びたいという方はこちら。| Click here if you want to learn directly from professionals
キャリアアップに必要なスキルを取得しよう。| Get the skills you need to advance your career.
オンラインで受講ができるスクールですので、全国どこからでも。 | Since it is a school where you can take classes online, you can take it from anywhere in the country.
ぺージの先頭に戻る(Return to top of page)
©2020年9月 Challenge programming