Vue學習計劃-Vue2--Vue核心(三)methods和computed

Vue

1. 事件 v-on @

  1. 基礎

  2. 使用 v-on:xxx或者@xxx綁定事件,其中xxx是事件名

  3. 事件的回調需要配置在methods對象中,最終會在vm上

  4. methods中配置函數,不要用箭頭函數,否則this就不是vm了

  5. methods中配置函數,都是被Vue管理的函數,this指向 vm 或者 組件實例對象

  6. @click="demo"和@click=demo($event)效果一致,但是后者可以傳參

  7. 事件修飾符

  8. prevent: 阻止默認事件(常用)

  9. once: 事件只觸發一次(常用)

  10. stop: 阻止事件冒泡(常用)

  11. capture: 使用事件的捕獲模式 --> 給父級加

  12. self: 只有event.target是當前操作的元素時才觸發事件

  13. passtive: 事件的默認行為立即執行,無需要等待事件回調執行完畢

  14. @click.stop.prevent = 可以鏈式寫法

注意:

  1. .self和.stop 都可以阻止事件冒泡,有什么區別呢?
    1. .stop 是阻止事件向外繼續冒泡,當你給了子級.stop后他的父級就不會冒泡;
    2. .self 是我只讓自己不冒泡,其他人我不管
    <div @click = 'fatherClick'> <div @click.self="sonClick" style="padding:10px;background-color: aqua;"><p @click="childClick">self阻止冒泡</p></div><div @click="sonClick" style="padding:10px;background-color: aqua;"><p @click.stop="childClick">stop阻止冒泡</p></div>
    </div>
    

案例:

<body><div id="app"><!-- 1. 阻止默認事件: .prevent --><a :href="url" @click.prevent>跳轉</a><br><!-- 2. 事件只觸發一次: .once -->{{ count }}<button v-on:click.once = "count++">add</button><br><!--3.  阻止事件冒泡: .stop --><div @click="divClick"><p @click.stop="pClick">冒泡事件</p><p @click="stopClick">冒泡事件vue之前</p></div><br><!-- 4. 采用事件的捕獲模式 .capture --><div @click= 'fatherClick'><div @click.capture="divClick" style="padding: 20px;"><p @click="pClick">捕獲模式</p></div></div><br><!-- 5. 只有event.target是當前操作的元素時才觸發事件: self --><div @click.self="selfClick" style="padding:10px;background-color: aqua;"><p @click="pClick">self</p></div><hr><!-- #region .self 和.stop區別--><!-- .stop 是阻止事件向外繼續冒泡,當你給了子級.stop后他的父級就不會冒泡.self 是我只讓自己不冒泡,其他人我不管--><div @click = 'fatherClick'> <div @click.self="selfClick" style="padding:10px;background-color: aqua;"><p @click="pClick">self阻止冒泡</p></div><div @click="selfClick" style="padding:10px;background-color: aqua;"><p @click.stop="pClick">stop阻止冒泡</p></div></div><br><!-- #endregion --><!-- 7.鏈式寫法 --><div @click='fatherClick'><a :href="url" @click.stop.prevent>鏈式寫法</a></div></div><script>new Vue({el: '#app',data: {count: 1,url:'https://www.baidu.com/'},methods: {// #region// 冒泡捕獲 div標簽divClick(){console.log('div');},// 冒泡捕獲 p標簽pClick(){console.log('p');},// 阻止冒泡事件 舊stopClick(e){console.log(e);e.stopPropagation();},// 比較.self和.stop事件fatherClick(){console.log('父級');},// self自身事件selfClick(e){console.log(e.target);},// #endregion},})</script>
</body>
  1. 鍵盤事件 @keyup @keydown
vue之前鍵盤事件:
@keyup = "show"
methods:{
show(e){if(e.keyCode !== 13) returnconsole.log(e.target.value)
}
}
  1. Vue中常見的按鍵別名:
    回車 => enter刪除 => delete退出 => esc空格 => space換行 => tab (配合keydown使用)上 => up下 => down左 => left右 => right
  1. Vue未提供別名的按鍵,可以使用按鍵原始的key值去綁定,但要注意轉為kebeb-case(短橫線命名)
  2. 系統修飾鍵(用法特殊): shift, ctrl, alt, meta(win)
    1. 配合keyup使用,按下修飾鍵的同時,再按下其他的鍵,隨后釋放其他鍵,事件才會被觸發

      @keyup.ctrl | @keyup.ctrl.y 可以鏈式

    2. 配合keydown使用,正常觸發事件

  3. 也可以使用keyCode去指定具體的按鍵(不推薦,被淘汰)
    <input type="text" @keyup.13="clickEvent" placeholder="huiche">
  4. Vue.config.keyCode.自定義鍵名 = 鍵碼,可以去定制按鍵別名(不推薦)
    <input type="text" @keyup.huiche="clickEvent" placeholder="huiche">Vue.config.keyCodes.huiche = 13

案例:

<body><div id="app"><!-- vue之前鍵盤事件 --><input type="text"  @keyup="show" placeholder="show"><br><!-- #region 1. vue鍵盤別名 --><!-- enter事件 --><input type="text"  @keyup.enter="clickEvent" placeholder="enter"><br><!-- delete事件 --><input type="text"  @keyup.delete="clickEvent" placeholder="delete"><br><!-- esc事件 --><input type="text"  @keyup.esc="clickEvent" placeholder="esc"><br><!-- space事件 --><input type="text"  @keyup.space="clickEvent" placeholder="space"><br><!-- tab事件 --><input type="text" @keydown.tab="clickEvent" placeholder="tab"><br><!-- up事件 --><input type="text" @keyup.up="clickEvent" placeholder="up"><br><!-- down事件 --><input type="text" @keyup.down="clickEvent" placeholder="down"><br><!-- left事件 --><input type="text" @keyup.left="clickEvent" placeholder="left"><br><!-- right事件 --><input type="text" @keyup.right="clickEvent" placeholder="right"><hr><!-- #endregion --><!-- 2. 未提供別名的按鍵 --><input type="text" @keyup.caps-lock="clickEvent" placeholder="caps-lock"><input type="text" @keyup.a="clickEvent" placeholder="a"><hr><!-- 3. 系統修飾符 --><input type="text" @keyup.shift="clickEvent" placeholder="shift"><br><input type="text" @keyup.ctrl="clickEvent" placeholder="ctrl"><br><input type="text" @keydown.alt="clickEvent" placeholder="alt"><br><!-- 可以鏈式 --><input type="text" @keyup.ctrl.x="clickEvent" placeholder="ctrl+x"><br><input type="text" @keyup.huiche="clickEvent" placeholder="huiche"><input type="text" @keyup.40="clickEvent" placeholder="huiche"></div><script>Vue.config.keyCodes.huiche = 13var vm = new Vue({el: '#app',methods: {show(e){if(e.keyCode !== 13) returnconsole.log(e.keyCode, e.target.value);},clickEvent(e){console.log(e.code, e.keyCode, e.target.value);},},})</script>
</body>

2. 計算屬性(computed)

  1. 引入: 姓名案例, 模板語法:vue官網風格指南=> 模板中簡單表達式
  2. 定義:要用的屬性不存在,要通過已有 的屬性計算得來
  3. 原理: 利用Object.defineProperty方法提供的getter和setter
  4. get函數什么時候執行?
    1. 初次讀取時會執行一次
    2. 當依賴的數據發生改變時會被再次調用
  5. 優勢:與methods實現相比,內部有緩存機制(復用),效率更高,調試方便
  6. 備注:
    1. 計算屬性最終會出現在vm上,直接讀取使用即可
    2. 如果計算屬性要被修改,那必須寫set函數去響應修改,且set中要引起計算屬性依賴的數據發生變化
const vm = new Vue({
el: '#APP',
data:{firstName: '張',lastName: '三'
},
computed:{// 1. 完整寫法fullName:{// get有什么作用?當有人讀取fullName時,get就會被調用,且返回值就是fullName的值// 計算屬性有緩存// get什么時候被調用? 1. 初次讀取數據會執行一次  2. 當依賴的數據發生改變時會被再次調用get(){console.log('get被調用了')console.log(this) // this指向vmreturn this.firstName + '-' + lastName},// set有什么作用? 當每次修改fullName時,就會調用setset(value){const arr = value.split('-')// 計算屬性是依賴 firstName,lastName計算出來的,改變fullName需要把依賴的數據改變this.firstName = arr[0]this.lastName = arr[1]}},// 2. 簡寫, // 確定只是讀取,不對fullName做修改,可以簡寫// fullName就是計算屬性的名稱fullName(){return this.firstName + '-' + this,lastName}}
})

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208081.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208081.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208081.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Seata使用

本文以seata-server-1.5.2&#xff0c;以配置中心、注冊中心使用Nacos&#xff0c;store.modedb&#xff08;mysql&#xff09;為例進行操作。 一、Seata Server端 1、下載seata server 鏈接: http://seata.io/zh-cn/blog/download.html下載壓縮包&#xff0c;解壓至非中文目錄…

Java技術棧 —— 微服務框架Spring Cloud —— Ruoyi-Cloud 學習(一)

Ruoyi-cloud 項目學習 一、項目環境搭建與啟動1.1 nacos安裝部署1.1.1 nacos安裝、啟動1.1.2 nacos部署 1.2 seata安裝部署1.3 后端部署與運行1.3.1 ruoyi-modules-file模塊運行報錯 1.4 nginx安裝、部署、配置與啟動1.5 redis安裝與部署1.6 前段框架知識1.7 項目啟動1.8 參考 …

實用方法 | 搭建真正滿足用戶需求的在線幫助中心

隨著互聯網的普及和信息技術的快速發展&#xff0c;客戶服務和支持變得越來越重要。為了提高客戶滿意度和維持良好的品牌形象&#xff0c;越來越多企業都開始搭建自己的在線幫助中心。 不知從何下手&#xff1f;細想一下&#xff0c;搭建在線幫助中心主要就是為了解決用戶的問…

根據java類名找出當前是哪個Excel中的sheet

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

shell_81.Linux在命令行中創建使用函數

在命令行中使用函數 在命令行中創建函數 兩種方法 單行方式來定義函數&#xff1a; $ function divem { echo $[ $1 / $2 ]; } $ divem 100 5 20 $ 當你在命令行中定義函數時&#xff0c;必須在每個命令后面加個分號&#xff0c;這樣 shell 就能知道哪里是命令的起止了&am…

反射實現tomcat

獲取類信息的方法 1.通過類對象 x.getClass() 2.通過class.forname方法 Class.forname(className);這里className是存儲類名的字符串 3.通過類名.class 類名.class 通過類名創建對象 類名.newInstance&#xff08;&#xff09;&#xff1b; 反射可以看到類的一切信息&#xff1…

C語言聯合和枚舉講解

目錄 聯合體的大小 聯合體如何省空間 巧用聯合體 聯合判斷大小端&#xff08;驚為天人&#xff0c;大佬寫的&#xff0c;我借鑒&#xff09; 枚舉 枚舉類型的使用 首先我們先看一下菜鳥教程中的對C語言聯合體的說明 聯合體的大小 #include <stdio.h> union u {char…

Proteus仿真--基于ADC0808設計的調溫報警器

本文介紹基于ADC0808實現的調溫報警器設計&#xff08;完整仿真源文件及代碼見文末鏈接&#xff09; 溫度調節使用滑動變阻器模擬實現&#xff0c;ADC0808采集信號并輸出在LCD上面顯示&#xff0c;報警系統是LED燈和蜂鳴器實現聲光電報警 仿真圖如下 仿真運行視頻 Proteus仿真…

Java實現二分法的案例,什么是二分法

文章目錄 Java實現二分法的案例&#xff0c;什么是二分法二分法實現 Java實現二分法的案例&#xff0c;什么是二分法 二分法 概念&#xff1a; 二分法&#xff08;Bisection method&#xff09; 即一分為二的方法&#xff0c;又叫折半查找方法。把一組有序數列分為左右兩部分…

前程無憂接口分析

前程無憂接口分析 所需用到的工具URL解析通過抓包軟件或者開發者選項抓取數據包對代碼中的參數解析分析對acw_sc__v2進行分析對acw_sc__v2進行轉換代碼生成生成outPutList數組生成arg2參數生成arg3參數最終的效果 對詳情頁面的分析對timestamp__1258的生成分析 所需用到的工具 …

Vue3.0優點詳解

相對于Vue2.0 3.0有了比較大的改進&#xff0c;優勢主要有以下幾點&#xff1a; 一、性能提升 1、Vue3.0的響應式系統使用了Proxy代理對象&#xff0c;取代了Vue2.0中的Object.defineProperty&#xff0c;使得Vue3.0的響應式系統更快、更靈活。 2、Vue3.0對TypeScript的支持更…

Ubuntu22.04安裝完成后便可直接使用鍵盤上的Print鍵進行截圖

概要&#xff1a;Ubuntu22.04安裝完成后&#xff0c;無需安裝什么截圖軟件&#xff0c;可以直接使用鍵盤上的Print鍵進行截圖。 1、按一下Print鍵 我的電腦上Print鍵是PrtSc&#xff0c;如下圖所示 2、框選區域并截圖 如下圖中&#xff0c;可以框選(Selection)&#xff0c;也…

【教學類-35-06】17號的學號字帖延伸出的全體字帖(1-9去0)(A4豎版1份)

作品展示 背景需求&#xff1a; 給大4班17號同學單獨做了一個學號字帖后&#xff0c;我想可以把這樣的學具用在中班&#xff08;我馬上要成為中4班老師了&#xff09;&#xff0c;那就需要給全班做一份這樣的大號學號貼。 使用17號同學的word模板&#xff08;見下文&#xff…

3dMax vs Cinema4d哪個更好更適合你?

Cinema 4d和3dMax的區別 用于游戲風格、開發和風格可視化的3D建模、動畫和渲染軟件系統&#xff0c;為用戶提供制作和編輯動畫、視覺效果和環境的靈活性。4D CINEMA可能是由MAXON構建的強大的3D建模、運動圖形、繪畫和動畫軟件系統。Cinema 4D將在每個Windows和MAC操作系統上運…

多目標追蹤評價指標

多目標追蹤性能評價 基礎&#xff1a; GT&#xff1a;Ground Truth&#xff0c;是指真實的標簽或者真實的對象&#xff1b; TP&#xff1a;True Positive&#xff0c;被正確預測檢測到的樣本&#xff1b; TN&#xff1a;True Negative&#xff0c;被預測為負的負樣本&#…

啃下這50道筆試題,你就是SQL專家!(附答案,收藏備用)

【關注微信公眾號&#xff1a;跟強哥學SQL&#xff0c;回復“筆試”免費領取大廠SQL筆試題。】 有兩個名為Department&#xff08;部門&#xff09;和Employees&#xff08;員工&#xff09;的表結構如下&#xff1a; CREATE TABLE Department ( DepId int, DepName va…

文章解讀與仿真程序復現思路——電力系統自動化EI\CSCD\北大核心《考慮兩階段魯棒優化配置的多微網合作博弈》

這個標題涉及到多個概念&#xff0c;讓我們逐步解讀&#xff1a; 考慮兩階段魯棒優化配置&#xff1a; 兩階段&#xff1a; 指的是在解決問題或進行優化時&#xff0c;可能存在兩個不同的階段或步驟。這表明問題的解決不是一步完成的&#xff0c;而是需要經過多個步驟或階段。魯…

前端學習系列之CSS

目錄 CSS 簡介 發展史 優勢 基本語法 引用方式 內部樣式 行內樣式 外部樣式 選擇器 id選擇器 class選擇器 標簽選擇器 子代選擇器 后代選擇器 相鄰兄弟選擇器 后續兄弟選擇器 交集選擇器 并集選擇器 通配符選擇器 偽類選擇器 屬性選擇器 CSS基本屬性 優…

virtualenv創建虛擬環境

目錄 概念安裝創建虛擬環境激活虛擬環境刪除虛擬環境退出虛擬環境更改虛擬環境路徑概念 virtualenv是一個創建隔離的Python運行環境的工具。它允許用戶為每個Python項目創建一個獨立的虛擬環境,以避免不同項目之間的依賴沖突。 安裝 pip install virtualenv virtualenvwrapper…

JS如何實現豎屏輪播圖

首先是HTML搭建結構 <div class"banner-box"><div class"bannerbox"><div class"banner"><a class"a-img-ban"> <img class"img-ban" src"./img/640 (4).jpg" alt"終于等到你還…