Vue day02 Computed和Watch

1.事件綁定
可以用 v-on 指令監聽DOM 事件,并在觸發時運行一些 JavaScript 代碼。v-on 還可以接收一個需要調用的方法名稱。
<button v-on:click="handler">good</button>
methods: {
handler: function (event) {
if (event) { alert(event.target.tagName) } // event 是原生 DOM 事件
}
}
除了直接綁定到一個方法,也可以在內聯 JavaScript 語句中調用方法,通過$event傳遞原生事件對象:
<button v-on:click="say('hi',$event)">Say hi</button>
methods: { say: function (message,event) { alert(message) } }
由于事件綁定在vue中使用概率較大,所以這里提供了簡寫形式
<button @click=“say(‘hi’,$event)”>Say hi

事件參數
在事件調用時,可以進行參數的傳遞 :
### html代碼
<div id="app"><el-button @click="toAdd" type="primary" size="small">新增</el-button><div><el-table type="index" size="small" :data="tableData" style="width: 50%"><el-table-column  prop="date" label="日期" width="180"></el-table-column><el-table-column prop="name" label="姓名" width="180"></el-table-column><el-table-column prop="address" label="地址"></el-table-column><el-table-column label="操作"><template slot-scope="scope"><el-button size="small" @click="toEdit(scope.row)" type="primary">編輯</el-button><el-button size="small" type="danger" @click="toDelete(scope.row.id)">刪除</el-button></template></el-table-column></el-table></div><el-dialog :title="title" :visible.sync="dialogFormVisible"><el-form :model="form"><el-form-item  label="時間" :label-width="formLabelWidth"><el-input v-model="form.date" autocomplete="off"></el-input></el-form-item><el-form-item label="姓名" :label-width="formLabelWidth"><el-input v-model="form.name" autocomplete="off"></el-input></el-form-item><el-form-item label="地址" :label-width="formLabelWidth"><el-input v-model="form.address" autocomplete="off"></el-input></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogFormVisible = false">取 消</el-button><el-button type="primary" @click="dialogFormVisible = false">確 定</el-button></div></el-dialog></div>
### js代碼
<script>new Vue({el: "#app",data: {dialogFormVisible: false,formLabelWidth: "120px",form: {},title: '',tableData: [{id: 1,date: '2016-05-02',name: '王小虎',address: '上海市普陀區金沙江路 1518 弄'}, {id: 2,date: '2016-05-04',name: '王小虎',address: '上海市普陀區金沙江路 1517 弄'}, {id: 3,date: '2016-05-01',name: '王小虎',address: '上海市普陀區金沙江路 1519 弄'}, {id: 4,date: '2016-05-03',name: '王小虎',address: '上海市普陀區金沙江路 1516 弄'}]},methods: {toAdd() {this.dialogFormVisible = true;this.form = {};this.title = '新增數據'},toEdit(row) {this.form = { ...row };this.dialogFormVisible = true;this.title = '修改數據';},toDelete(id) {this.$confirm('此操作將永久刪除該文件, 是否繼續?', '提示', {confirmButtonText: '確定',cancelButtonText: '取消',type: 'warning'}).then(() => {this.tableData.splice(id,1)this.$message({type: 'success',message: '刪除成功!'});}).catch(() => {this.$message({type: 'info',message: '已取消刪除'});});}}})</script>

進行事件綁定時,可以將v-on:事件名縮寫為**@事件名**,此方式經常使用 :

事件修飾符

事件修飾符
在事件處理程序中調用 event.preventDefault() 或 event.stopPropagation() 是非常常見的需求。Vue提供了更好的方式:事件處理函數只有純粹的數據邏輯,而不是去處理 DOM 事件細節,通過事件修飾符來完成這些細節。

<button v-on:click.prevent="handler">點我點我</button>

常見修飾符如下
.stop 停止事件冒泡
.prevent 阻止事件默認行為
.capture 在事件捕獲階段執行事件處理函數
.self 只當在 event.target 是當前元素自身時觸發處理函數
.once 事件處理函數執行一次后解綁
.passive 滾動事件的默認行為 (即滾動行為) 將會立即觸發 ,一般與scroll連用,能夠提升移動端的性能
按鍵修飾符
一般與keyup事件類型配合使用
.enter、.tab、.delete、.esc、.space、.up、.down、.left、.right
.ctrl、.alt、.shift、.meta
鼠標修飾符mouseup事件
.left、.right、.middle

### js代碼
new Vue({el: "#app",data: {msg: '事件修飾符'},methods: {keyupHandle() {console.log('按下某些特殊鍵');},toJump() {console.log('跳轉');alert(1);},outer(e) {// e.target是觸發事件的源頭元素,目標元素// e.currentTarget 當前執行事件處理程序的元素,當前目標元素// console.log('outer', e.target, e.currentTarget);console.log('outer')for (let i = 0; i < 100; i++) {console.log(i);}},inner(e) {// e.stopPropagation();// console.log('inner', e.target, e.currentTarget);console.log('inner');}}})
### html代碼
<div id="app"><!-- <input type="text" @keyup.enter="keyupHandle"> --><input type="text" @keyup.13="keyupHandle"><!-- <input type="text" @mouseup.left="keyupHandle"> -->{{msg}}<a @click.prevent="toJump" href="http://www.baidu.com">百度一下</a><!-- 點擊inner   event.target   --><!-- <div class="outer" @click.self.once="outer"> --><!-- <div class="outer" @click.self="outer"> --><!-- <div class="outer" @click.capture="outer"> --><div class="outer" @scroll.passive="outer">outer<div class="inner" @click="inner"><!-- <div class="inner" @click.stop="inner"> -->inner</div></div></div>

表單

可以用 v-model 指令在表單 <input><textarea><select>元素上創建雙向數據綁定。 它會根據控件類型自動選取正確的方法來更新元素。盡管有些神奇,但 v-model 本質上不過是語法糖。它負責監聽用戶的輸入事件以更新數據,并對一些極端場景進行一些特殊處理。使用v-model綁定了值, 那么name屬性就可以不用寫了。

### html代碼
<div id="app">{{msg}}<br>{{stu}}<br><!-- 用戶名:<input type="text" v-model.lazy="stu.username"> -->用戶名:<input type="text" v-model.trim="stu.username"><br><!-- .number修飾符,可以將采集到的數據轉為number類型,然后再存儲到數據模型中 -->年齡:<input type="text" v-model.number="stu.age"><br><!-- 性別 -->性別:<input type="radio" value="male" v-model="stu.gender"><input type="radio" value="female" v-model="stu.gender"><br><!-- 愛好 -->愛好:<input type="checkbox" value="basketball" v-model="stu.hobby">籃球<input type="checkbox" value="swimming" v-model="stu.hobby">游泳<input type="checkbox" value="dancing" v-model="stu.hobby">跳舞<br><!-- 城市 -->城市:<!-- <select multiple v-model="stu.city"> --><select v-model="stu.city"><option value="shanghai">上海</option><option value="beijing">北京</option><option value="guangzhou">廣州</option></select><br><!-- 簡介 -->簡介:<textarea v-model="stu.info" cols="30" rows="10"></textarea></div>
### js代碼new Vue({el: '#app',data: {msg: 'hello',stu: {// 復選框hobby: []}},methods: {}})

watch(監聽器 監聽屬性)

當需要在數據變化時執行異步或開銷較大的操作時,使用監聽器是最有用的

雖然計算屬性在大多數情況下更合適,但有時也需要一個自定義的偵聽器。這就是為什么 Vue 通過 watch 選項提供了一個更通用的方法,來響應數據的變化。當需要在數據變化時執行異步或開銷較大的操作時,這個方式是最有用的 。

### html代碼
<div id="app">{{msg}}<br>a:<input type="text" v-model.number="a"><br>+<br>b:<input type="text" v-model.number="b"><br>=<br><output>{{total}}</output></div>
### js代碼new Vue({el: '#app',data: {msg: 'hello',a: 0,b: 0,total: 0},methods: {},// 監聽  偵聽watch: {a(newValue, oldValue) {this.total = this.a + this.b;},b(newValue, oldValue) {this.total = this.b + this.a;}}})
### 深度監聽
### js代碼new Vue({el: '#app',data: {msg: 'hello',a: 1,obj: {name: 'zhangsan',age: 12},},watch: {a(newValue, oldValue) {console.log('a數據發生變化...');},/* obj(newValue, oldValue) {console.log('obj數據發生變化...');} */// 深度監聽obj: {handler(newValue, oldValue) {console.log('obj數據發生變化...');},// 深度監聽deep: true}},methods: {changeObj() {// 更改內部數據this.obj.name = 'lisi';}}})
### html代碼<div id="app">{{msg}}<br>{{obj}}<button @click="changeObj">更改obj</button></div>

computed(計算屬性)

計算屬性 有依賴關系的數據

我們希望一個變量是經過某種計算然后輸出而不是直接輸出的時候可以使用到計算屬性
計算屬性是基于它們的響應式依賴進行緩存的。只在相關響應式依賴發生改變時它們才會重新求值。而每次調用函數都會導致函數的重新執行。

 ### html代碼
<div id="app">{{msg}}<br>a:<input type="text" v-model.number="a"><br>+<br>b:<input type="text" v-model.number="b"><br>=<br>{{total}}</div>	
### js代碼new Vue({el: '#app',data: {msg: 'hello',a: 0,b: 0,// total: 0},// 計算屬性computed: {total(){console.log('計算屬性');// return 111return this.a+this.b}},methods: {}})
面試題
*** watch和computed的區別 computed1. 具有緩存性,頁面重新渲染值不變化,計算屬性會立即返回之前的計算結果,而不必再次執行函數2.計算屬性計算某一個屬性得變化,如果某一個值改變了,計算屬性會見監聽到進行返回watch1. 監聽值的變化,執行異步操作【axios請求】’$route.query‘:{this.loadArticle()}2. 無緩存性,只有當當前值發生變化時才會執行/響應
console.log('計算屬性');// return 111return this.a+this.b}},methods: {}
})

```javascript
面試題
*** watch和computed的區別 computed1. 具有緩存性,頁面重新渲染值不變化,計算屬性會立即返回之前的計算結果,而不必再次執行函數2.計算屬性計算某一個屬性得變化,如果某一個值改變了,計算屬性會見監聽到進行返回watch1. 監聽值的變化,執行異步操作【axios請求】’$route.query‘:{this.loadArticle()}2. 無緩存性,只有當當前值發生變化時才會執行/響應

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

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

相關文章

接口測試之Jmeter+Ant+Jenkins接口自動化測試平臺

平臺簡介 一個完整的接口自動化測試平臺需要支持接口的自動執行&#xff0c;自動生成測試報告&#xff0c;以及持續集成。Jmeter支持接口的測試&#xff0c;Ant支持自動構建&#xff0c;而Jenkins支持持續集成&#xff0c;所以三者組合在一起可以構成一個功能完善的接口自動化…

BOLT- 識別和優化熱門的基本塊

在BOLT中&#xff0c;識別和優化熱門的基本塊之所以關鍵&#xff0c;是因為BOLT的主要目標是優化程序以更好地利用硬件特性&#xff0c;特別是指令緩存&#xff08;ICache&#xff09;。以下是BOLT如何識別和優化熱門基本塊的流程&#xff1a; 收集性能數據: BOLT開始的時候并不…

idea - 刷新 Git 分支數據 / 命令刷新 Git 分支數據

一、idea - 刷新 Git 分支數據 idea 找到 fetch 選項&#xff0c;重新獲取分支數據 二、命令刷新 Git 分支數據 git fetch參考鏈接 1. 遠程Gitlab新建的分支在IDEA里不顯示

jxls導出問題

![請添加圖片描述](https://img-blog.csdnimg.cn/bc74c4207818491c93b75e19b3333451.png 為什么最后導出的文件還是按原樣導出啊&#xff0c;沒有填充數據 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/d4500b9a98c042f6b64a5d0650071303.png

qt多線程使用方式

有5個方式&#xff1a;可以參考這個博客&#xff1a;Qt 中開啟線程的五種方式_qt 線程_lucky-billy的博客-CSDN博客 注&#xff1a;為了實現更加靈活的線程管理&#xff08;因為這5種都有一些不方便之處&#xff1a;QThread需要子類化且不能傳參&#xff0c;moveToThread不能傳…

【leetcode】459. 重復的子字符串(easy)

給定一個非空的字符串 s &#xff0c;檢查是否可以通過由它的一個子串重復多次構成。 示例 1: 輸入: s “abab” 輸出: true 解釋: 可由子串 “ab” 重復兩次構成。 示例 2: 輸入: s “aba” 輸出: false 示例 3: 輸入: s “abcabcabcabc” 輸出: true 解釋: 可由子串 “ab…

ChatGPT等人工智能編寫文章的內容今后將成為常態

BuzzFeed股價上漲200%可能標志著“轉向人工智能”媒體趨勢的開始。 周四&#xff0c;一份內部備忘錄被華爾街日報透露BuzzFeed正計劃使用ChatGPT聊天機器人-風格文本合成技術來自OpenAI&#xff0c;用于創建個性化盤問和將來可能的其他內容。消息傳出后&#xff0c;BuzzFeed的…

ubuntu 20.04 RK3568網絡的優先級設置

1、背景 硬件使用RK3568 CPU&#xff0c;操作系統采用ubuntu 20.04 Lxqt桌面的版本。硬件上具有一個有線以太網卡&#xff0c;一個wifi網卡&#xff0c;一個5G網卡。由于操作系統默認的網絡優先級為有線網卡的最高&#xff0c;5G網卡次之。在一個業務應用中需要5G網卡的連接外…

文本三劍客之grep命令和awk命令 1.0 版本

grep awk 1.grep命令1.1 基本格式1.2 常用選項 2.awk命令2.1 awk工作原理2.2 awk命令格式2.3 awk常用內置變量 1.grep命令 1.1 基本格式 grep [選項]… 查找條件 目標文件1.2 常用選項 選項功能 -m [ x ]匹配x次 后停止,x為具體數字-v取反 -i忽略字符大小寫 -n顯示匹配的 …

Dynamic CRM開發 - 實體介紹

實體簡介 在CRM中,實體(Entity)是數據的基本載體,也是構建業務邏輯網絡的基礎節點。 實體可以理解為數據庫中的一張表(實體中的字段對應數據庫表的字段),比如創建一個實體存儲客戶信息,創建一個實體存儲產品信息,產品實體里可以創建一個查找類型的字段(類似表的外鍵)…

【Express.js】集成RabbitMQ

集成RabbitMQ 本節我們介紹在 express.js 中集成 rabbitmq. RabbitMQ 是一個消息隊列中間件&#xff0c;常用于請求削峰&#xff0c;事務的隊列處理&#xff0c;事件訂閱機制的實現等。 準備工作 創建一個 express.js 項目&#xff08;本文基于evp-express-cli&#xff09;…

【三維編輯】Seal-3D:基于NeRF的交互式像素級編輯

文章目錄 摘要一、引言二、方法2.1.基于nerf的編輯問題概述2.2.編輯指導生成2.3.即時預覽的兩階段學生訓練 三、實驗四、代碼總結 項目主頁: https://windingwind.github.io/seal-3d/ 代碼&#xff1a;https://github.com/windingwind/seal-3d/ 論文: https://arxiv.org/pdf/23…

創建一個Spring Boot項目

安裝所需軟件&#xff1a;首先確保你的計算機上已經安裝了Java JDK和Maven構建工具。你可以從官方網站下載并按照說明進行安裝。 創建一個新的Spring Boot項目&#xff1a;在命令行或終端中使用Maven命令創建一個新的Spring Boot項目。執行以下命令&#xff1a;mvn archetype:…

阿里云輕量應用服務器_2核4G4M_2核2G3M_性能測評

阿里云輕量應用服務器2核2G3M帶寬108元一年&#xff0c;系統盤為50GB高效云盤&#xff1b;輕量服務器2核4G4M帶寬&#xff0c;60GB高效云盤297.98元12個月。目前輕量應用服務器只有2核2G和2核4G有活動&#xff0c;阿里云百科分享阿里云輕量應用服務器入口&#xff1a; 目錄 阿…

【Qt高階】老Qt都不一定清楚的“QObject線程親和性”【2023.08.13】

老Qt都不一定清楚的“線程親和性” 與題目無關 感覺自己還挺2&#xff0c;有粉絲點了那個契約者會給up發個鼓勵的話&#xff0c;我還以為是人私信發的&#xff0c;都挨個感謝了&#xff0c;后來才意識到是系統自動發的&#x1f623;&#x1f623;&#x1f623;。 自上上期視頻對…

Three.js陰影

目錄 Three.js入門 Three.js光源 Three.js陰影 Three.js紋理貼圖 使用燈光后&#xff0c;場景中就會產生陰影。物體的背面確實在黑暗中&#xff0c;這稱為核心陰影&#xff08;core shadow&#xff09;。我們缺少的是落下的陰影&#xff08;drop shadow&#xff09;&#…

【數據結構】——棧、隊列的相關習題

目錄 題型一&#xff08;棧與隊列的基本概念&#xff09;題型二&#xff08;棧與隊列的綜合&#xff09;題型三&#xff08;循環隊列的判空與判滿&#xff09;題型四&#xff08;循環鏈表表示隊列&#xff09;題型五&#xff08;循環隊列的存儲&#xff09;題型六&#xff08;循…

一文揭秘餓了么跨端技術的演進、實踐與落地

跨端技術背景與演進歷程 跨端&#xff0c;究竟跨的是哪些端&#xff1f; 自 90 年的萬維網出現&#xff0c;而后的三十多年&#xff0c;我們依次經歷了 PC 時代、移動時代&#xff0c;以及現在的萬物互聯&#xff08;的 IoT &#xff09;時代&#xff0c;繁榮的背后&#xff…

【Apollo】Apollo-ros版本架構學習與源碼分析

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 這篇文章主要介紹Apollo-ros版本架構學習與源碼分析。 無專精則不能成&#xff0c;無涉獵則不能通。——梁啟超 歡迎來到我的博客&#xff0c;一起學習&#xff0c;共同進步。 喜歡的朋友可以關注一下&a…

微信小程序如何自定義分享卡片文案和圖片

微信小程序提供了onShareAppMessage方法&#xff0c;專門用來監聽用戶點擊頁面內轉發按鈕&#xff08;button 組件 open-type"share"&#xff09;或右上角菜單“轉發”按鈕的行為&#xff0c;并自定義轉發內容。 > 注意&#xff1a;只有定義了此事件處理函數&…