こんにちは。ハイナレです。
今日はVue.jsでイベント処理を実装してみました。
ボタンを押すとアラートが出る、とってもシンプルな処理です。
さすがにシンプルすぎるかなと思ったので、ちょっとストーリー性を持たせてみました!
コード
今回もJSFiddleで作ります。だってラクなんだもの。
「Result」タブをクリックすると結果が表示されますよ。
お察しの方も多いと思いますが、コナンの映画「時計じかけの摩天楼」のラストシーンを再現しています。
※ネタバレが嫌な人はボタンを押さないでくださいね。
【HTML】
<div style="text-align:center;"> <div class="episode"> <p>あなたは時限爆弾を解体しています。</p> <p>最後に赤と青のコードが残りました。</p> <p>どちらを切りますか?</p> </div> <div id="app-108" style="text-align:center;"> <button class="square_btn red" v-on:click="die">赤</button> <button class="square_btn blue" @click="live">青</button> </div> </div>
【JavaScript】
var app108 = new Vue({ el: '#app-108', methods: { live: function() { alert("おめでとうございます!時限爆弾が止まりました。"); }, die:function(){ alert("どっかーん!"); } } })
【CSS】
.episode{ background-color:#dddddd; display:inline-block; padding:1rem; margin:1rem; } .square_btn { position: relative; display: inline-block; padding: 0.5em 1em; text-decoration: none; color: #FFF; border-radius: 4px;/*角の丸み*/ box-shadow: inset 0 2px 0 rgba(255,255,255,0.2), 0 2px 2px rgba(0, 0, 0, 0.19); font-weight: bold; } .square_btn:active { border-bottom: solid 2px #222222; box-shadow: 0 0 2px rgba(0, 0, 0, 0.30); } .red{ background: #FF0000; border-bottom: solid 2px #8A0808;/*少し濃い目の色に*/ } .blue{ background: #0404B4; border-bottom: solid 2px #0B0B61;/*少し濃い目の色に*/ }
解説
イベント処理には「v-on」または「@」を使います。「@」は「v-on:」の省略形です。
下記の2行で、クリック時のイベントを指定していますね。
<button class="square_btn red" v-on:click="die">赤</button> <button class="square_btn blue" @click="live">青</button>
コードを日本語訳すると、
「赤ボタンを押したら”die”メソッドを実行。青ボタンを押したら”live”メソッドを実行」
という感じでしょうか。
赤ボタンに「v-on:click=」
青ボタンに「@click=~」
と書いてありますが、どちらも意味は同じです。今回は勉強のため2通りの書き方をしてみました。
どちらを使うのが一般的なんでしょう?両方のメリットとデメリットを知りたいですね。
参考サイト
Vue.js入門
CSSで作る!押したくなるボタンデザイン100(Web用)