帶入參數 我們設定一個 dataArr
陣列,裡面存放 name
還有 money
組成的物件,我們宣告一個 save
方法,傳入一個物件 item
把當成這個方法參數,並將這個方法用 @click
綁定在 button
的點擊事件。最後我們使用 v-for
存取 dataArr
的資料 ,將 dataArr
的值傳入 item
,此時當我們點擊按鈕後,dataArr
就會用 item
物件的方式傳入 save
方法中,執行將物件的 money
加 500。
1 2 3 4 5 6 7 8 9 <body > <div class ="app" > <ul > <li v-for ="item in dataArr" > {{item.name}}有{{item.money}}$ <input type ="button" value ="儲值" @click ="save(item)" > </li > </ul > </div > </body >
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" ></script> <script> var app = new Vue({ el:'.app' , data:{ dataArr:[ { name: 'Leo' , money:200 }, { name: 'Peter' , money:600 }, { name: 'Amy' , money:500 } ] }, methods:{ save:function (item ) { item.money+=500 ; } } }); </script>
事件修飾符 如果我們設定三個 div
區塊,一個 div
區塊包著另一個 div
區塊,並且在 div
區塊內設定點擊方法 show
,此方法會秀出 div
區塊的名稱,此時當我點擊最裡面 div
區塊元素時可以發現,我們明明只有點擊到最內部的 div
區塊,console
卻顯示從 box3
到 box1
,這是因為我們在觸發動元素時是由內從外觸發。所以我們點擊內部 div
也會觸發到外部的 div
區塊。
1 2 3 4 5 6 7 8 9 10 <body > <div class ="app" > <div style ="width:100px;height:100px;background-color: red;" @click ="show('box1')" > <div style ="width:50px;height:50px;background-color:black;" @click ="show('box2')" > <div style ="width:25px;height:25px;background-color:green;" @click ="show('box3')" > </div > </div > </div > </div > </body >
1 2 3 4 5 6 7 8 9 10 11 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" ></script> <script> var app = new Vue({ el:'.app' , methods:{ show: function (item ) { console .log(item); } } }); </script>
.stop 若我們在 @click
加上 .stop
就可以讓點擊事件不向外擴散。
1 2 3 4 5 6 7 8 9 10 <body > <div class ="app" > <div style ="width:100px;height:100px;background-color: red;" @click.stop ="show('box1')" > <div style ="width:50px;height:50px;background-color:black;" @click.stop ="show('box2')" > <div style ="width:25px;height:25px;background-color:green;" @click.stop ="show('box3')" > </div > </div > </div > </div > </body >
1 2 3 4 5 6 7 8 9 10 11 12 13 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" ></script> <script> var app = new Vue({ el:'.app' , data:{ }, methods:{ show: function (item ) { console .log(item); } } }); </script>
.capture 如果我們在 @click
加上 .capture
就可以讓點擊事件變成由外而內觸發,當我們點擊時顯示 box1 → box2
1 2 3 4 5 6 7 8 9 10 <body > <div class ="app" > <div style ="width:100px;height:100px;background-color: red;" @click.capture ="show('box1')" > <div style ="width:50px;height:50px;background-color:black;" @click.capture ="show('box2')" > <div style ="width:25px;height:25px;background-color:green;" @click.capture ="show('box3')" > </div > </div > </div > </div > </body >
1 2 3 4 5 6 7 8 9 10 11 12 13 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" ></script> <script> var app = new Vue({ el:'.app' , data:{ }, methods:{ show: function (item ) { console .log(item); } } }); </script>
.self @click
加上 .self
,就只會觸發本身事件
1 2 3 4 5 6 7 8 9 10 <body > <div class ="app" > <div style ="width:100px;height:100px;background-color: red;" @click.self ="show('box1')" > <div style ="width:50px;height:50px;background-color:black;" @click.self ="show('box2')" > <div style ="width:25px;height:25px;background-color:green;" @click.self ="show('box3')" > </div > </div > </div > </div > </body >
1 2 3 4 5 6 7 8 9 10 11 12 13 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js" ></script> <script> var app = new Vue({ el:'.app' , data:{ }, methods:{ show: function (item ) { console .log(item); } } }); </script>