<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
功能:繫結指定事件名的回撥函數
標準寫法: v-on:click='xxx' v-on:keyup='xxx(引數)' v-on:keyup.enter='xxx' 簡便寫法: @click='xxx' @keyup='xxx' @keyup.enter='xxx'
<div id="root"> <!-- 需求當點選按鈕時彈出同學你好! --> <h1>歡迎來到{{name}}學習</h1> <!-- v-on:xxx可以簡寫為: @xxx --> <button v-on:click="btn1">點選我進行學習(不傳參)</button> <button @click="btn2('hello!','同學',$event)">點選我進行學習(傳參) //如果需要傳引數的話就在後面加(),裡面寫的就引數 </div> <script> /* 事件回撥需要寫在methods物件中,最終會在vm上 methods中設定的函數,不要使用箭頭函數 methods中設定的函數,this指向vm或者是元件範例化物件 */ Vue.config.productionTip = false var vm = new Vue({ el: '#root', data: { name: "清華大學" }, methods: { btn1() { alert("同學你好!") }, btn2(x, y, event) { console.log(x, y); console.log(event.target.innerText); alert("同學你好!") } } }) </script>
Vue中的事件修飾符有6個 - prevent : 阻止預設行為 - stop : 禁止冒泡 - once : 事件只觸發一次 - capture : 使用事件捕獲模式 - self : 只有even.target所指向的操作元素才能觸發事件 - passive : 讓事件的預設行為立即執行<body> <div id="root"> <!-- 1. prevent : 阻止預設行為 --> <a href="https://www.bilibili.com/" @click.prevent = "prevent">點選我進入b站</a> <hr> <!-- 2. stop : 禁止冒泡 --> <div @click = "stop" class="div1"> <button @click.stop = "stop">點選我觸發事件</button> </div> <hr> <!-- 3. once : 事件只觸發一次 --> <button @click.once = "once">我只能觸發一次哦</button> <hr> <!-- 4. capture : 使用事件捕獲模式 --> <div class="box1" @click.capture = "capture(1)"> div1 <div class="box2" @click = "capture(2)"> div2 </div> </div> <hr> <!-- 5. self : 只有even.target所指向的操作元素才能觸發事件 相當於要滿足兩個條件 - 1. event.target必須指向self所修飾的元素 - 2. 觸發的也必須是這個元素 從某種意義上相當於禁止了冒泡,因為冒泡雖然觸發上面事件 但是event.target所指向的並非是這個元素 --> <div class="box3" @click.self = "self"> <button @click = "self">點選我</button> </div> <hr> <!-- 6. passive : 讓事件的預設行為立即執行 scroll:表示的是卷軸進行卷動,卷軸改變就觸發,並且滑到底就不能繼續觸發 wheel :表示的是滑鼠滾輪捲動,捲動一次就觸發一次,滑到底依舊可以觸發 --> <ul style="overflow: auto; height: 100px;" @scroll.passive = "passive"> <li style="height: 600px;"></li> </ul> <!-- 7. 如果想要使用多個修飾符可以使用鏈式形式 --> <!-- 需要即想要阻止冒泡,也想要禁止預設行為 --> <div @click = "stop" class="div1"> <a @click.stop.prevent = "stop" href="https://www.baidu.com">點選我進入</a> </div> </div>
html程式碼
<body> <div id="root"> <!-- 1. prevent : 阻止預設行為 --> <a href="https://www.bilibili.com/" @click.prevent = "prevent">點選我進入b站</a> <hr> <!-- 2. stop : 禁止冒泡 --> <div @click = "stop" class="div1"> <button @click.stop = "stop">點選我觸發事件</button> </div> <hr> <!-- 3. once : 事件只觸發一次 --> <button @click.once = "once">我只能觸發一次哦</button> <hr> <!-- 4. capture : 使用事件捕獲模式 --> <div class="box1" @click.capture = "capture(1)"> div1 <div class="box2" @click = "capture(2)"> div2 </div> </div> <hr> <!-- 5. self : 只有even.target所指向的操作元素才能觸發事件 相當於要滿足兩個條件 - 1. event.target必須指向self所修飾的元素 - 2. 觸發的也必須是這個元素 從某種意義上相當於禁止了冒泡,因為冒泡雖然觸發上面事件 但是event.target所指向的並非是這個元素 --> <div class="box3" @click.self = "self"> <button @click = "self">點選我</button> </div> <hr> <!-- 6. passive : 讓事件的預設行為立即執行 scroll:表示的是卷軸進行卷動,卷軸改變就觸發,並且滑到底就不能繼續觸發 wheel :表示的是滑鼠滾輪捲動,捲動一次就觸發一次,滑到底依舊可以觸發 --> <ul style="overflow: auto; height: 100px;" @scroll.passive = "passive"> <li style="height: 600px;"></li> </ul> <!-- 7. 如果想要使用多個修飾符可以使用鏈式形式 --> <!-- 需要即想要阻止冒泡,也想要禁止預設行為 --> <div @click = "stop" class="div1"> <a @click.stop.prevent = "stop" href="https://www.baidu.com">點選我進入</a> </div> </div>
js程式碼
<script> Vue.config.productionTip = false new Vue({ el: '#root', data: { }, methods:{ prevent(){ alert("禁止預設行為"); }, stop(){ alert("禁止冒泡") }, once(){ alert("只能觸發一次") }, capture(x){ alert("現在是捕獲模式 "+x) }, self() { alert("self") }, passive(){ for (let index = 0; index < 1000; index++) { console.log("1") } } } }) </script> </body>
常用的按鍵別名: 1.正常使用 例如: @keyup.enter = "xxx" - 回車 enter - 刪除 delete - 退出 esc - 空格 space - 上 up - 下 down - 左 left - 右 right 2. 特別的按鍵 系統修飾鍵 : - ctrl,shift,alt,meta(就是window鍵) - 換行 tab(必須配合keydown去使用) - 配合keyup使用,當按下修飾鍵的時候在按下其他的鍵,然後在鬆開其他鍵事件才可以被觸發 - 配合keydown使用,就直接觸發事件 3.如果想要繫結其他按鍵,可以使用按鍵原始本身的key值(名字)去繫結 4.可以自定義去設定按鍵別名,Vue.config.keyCodes.自定義鍵名 = 鍵值
具體案例
<div id="root"> <h1>歡迎學習{{name}}</h1> <input type="text" @keyup="keyboard"> <br><br> <input type="text" @keyup.huiche="keyboard"> <br><br> <input type="text" @keyup.ctrl.y="keyboard"> </div> <script> Vue.config.productionTip = false Vue.config.keyCodes.huiche = 13 //定義了一個別名 var vm = new Vue({ el: '#root', data: { name: "Vue" }, methods: { keyboard(event){ // console.log(event.keyCode); 按鍵編碼 // console.log(event.key); 按鍵的名字 console.log(event.target.value); } } }) </script>
1.在頁面中的使用方法:=={{方法名}}==來顯示計算結果
2.定義:要使用的屬性/變數不存在,需要通過已有的屬性計算出來的
3.原理:底層是藉助了Object.defineProperty方法所提供的getter和setter
4.get函數執行的時機:
(1)初次讀取的時候會執行一次
(2)當所依賴的資料發生改變時就會再次被呼叫
5.相比於methods的優勢,內部是有快取機制(複用),效率會更高,偵錯會更方便
6.如果計算屬性要被修改,那必須寫set函數去響應修改,且set中要引起計算時依賴的資料發生改變
7.需要注意的一個特殊點:以下面例子舉例:get函數中return返回值的會作為fullname的值進行返回,在控制檯可以看到是這樣的形式呈現fullname:xxx。
8.computed中的this指向是vm
9.簡寫形式: 基本要求就是在不使用set的情況下才可以簡寫 注意在呼叫的時候不要寫成fullname()
<div id="root"> 姓: <input type="text" v-model="firstname"> <br><br> 名: <input type="text" v-model="lastname"> <!-- 第一種寫法 使用插值語法 --> <!-- <h3>全名: {{firstname.slice(0,3)}} - {{lastname}}</h3> --> <!-- 第二種寫法 使用methods --> <!-- <h3>全名: {{fullname()}}</h3> --> <!-- 第三種寫法 使用computed(計算屬性) --> <h3>全名:{{fullname}}</h3> </div> <script> Vue.config.productionTip = false let vm = new Vue({ el: '#root', data: { //屬性 firstname: "張", lastname: "三", }, // methods: // { // fullname() { // // 這裡的this指向是vm // return this.firstname.slice(0,3) + "-" + this.lastname // } // } computed: { fullname: { /* 1. Vue已經進行設定過了將this指向vm 2. 當用人去讀取fullname時,get就會被呼叫,但是get只被執行一次因為Vue做 了一個事,就是快取,當執行過一次後,後面資料再去讀取會走快取這條路。 3. return 的返回值會作為fullname的值,將fullname也拋到vm (fullname:"張-三") */ get() { return this.firstname + "-" + this.lastname }, set(value) { // 當fullname被修改時,set才會被呼叫 var arr = value.split("-") //按照指定字串進行拆分成陣列 this.firstname = arr[0] this.lastname = arr[1] } /* 簡寫形式: 基本要求就是在不使用set的情況下才可以簡寫 注意在呼叫的時候不要寫成fullname(),這個很特殊 computed:{ fullname(){ //相當於fullname:function(){} return this.firstname + "-" + this.lastname } } */ } } }) </script>
1.當所監視的屬性發生變化時,回撥函數自動呼叫,進行相關的操作
2.監視屬性必須要存在,才能進行監視
3.監視屬性的兩種寫法:
(1)在new Vue中設定watch
(2)通過vm.$watch進行監視
4.watch裡handler函數this的指向是vm
<div id="root"> <h1>今天天氣真{{weather}}</h1> <button @click="change">切換天氣</button> <h3>a的值是: {{a}}</h3> <!-- 在這裡面可以寫簡單的程式碼 --> <button @click = "a++">點選我讓a+1</button> </div> <script> Vue.config.productionTip = false let vm = new Vue({ el: '#root', data: { flag: true }, computed: { weather() { return this.flag ? "涼快" : "炎熱" } }, methods: { change() { return this.flag = !this.flag } }, watch:{ flag:{ // 第一個參數列示:修改後的值,第二個參數列示修改前的值 handler(newValue,oldValue){ console.log("flag被修改了"); }, immediate:true, //在一上來就執行一次 deep:true //表示深層次監視 } } }) vm.$watch("weather",{ immediate:true, handler(newValue,oldValue){ console.log("weather被修改了") } })
watch和computed的區別是:
1.watch能夠完成的功能,computed不一定可以完成,但是computed可以完成的,watch也可以完成
2.computed是依靠return的返回值(getter),所以它不能夠完成非同步的任務,而watch可以
3.watch是靠我們自己寫程式碼進行修改
4.在學Vue當中有兩個很重要的原則:
<div id="root"> <!-- 用watch寫一遍姓名的案例 --> 姓: <input type="text" v-model="firstname"> <br><br> 名: <input type="text" v-model="lastname"> <h2>全名: {{fullname}}</h2> </div> <script > // 需求:想要1s過後在顯示全名 Vue.config.productionTip = false let vm = new Vue({ el: '#root', data: { firstname: "張", lastname: "三", fullname: "張 - 三" }, watch: { firstname: { handler(newval) { console.log(this); //vm /* 這裡使用箭頭函數的目的就是為了讓this指向vue 此時沒有this所以他就向外面找,外面handler的this 指向是vm所以定時器的this指向也是vm */ setTimeout(() => { //這裡如果使用普通函數this就指向window console.log(this); //vm this.fullname = newval + " - " + this.lastname }, 1000); } }, lastname: { handler(newval) { setTimeout(() => { this.fullname = this.firstname + " - " + newval }, 1000); } } } }) </script>
以上就是今天要講的內容,本文僅僅介紹了Vue一些基本事件的操作,希望對大家有幫助!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45