VUE的第二天

1. 指令修飾符

1.1什么是指令修飾符?

? 所謂指令修飾符就是通過“.”指明一些指令后綴 不同的后綴封裝了不同的處理操作 —> 簡化代碼

1.2按鍵修飾符
  • @keyup.enter —>當點擊enter鍵的時候才觸發

代碼演示:

  <div id="app"><h3>@keyup.enter  →  監聽鍵盤回車事件</h3><input @keyup.enter="handleEnter" v-model="username" type="text"></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {username: ''},methods: {handleEnter() {console.log(this.username)}})</script>
1.3 v-model修飾符
  • v-model.trim —>去除首位空格
  • v-model.number —>轉數字
1.4事件修飾符
  • @事件名.stop —> 阻止冒泡
  • @事件名.prevent —>阻止默認行為
  • @事件名.stop.prevent —>可以連用 即阻止事件冒泡也阻止默認行為
 <style>.father {width: 200px;height: 200px;background-color: pink;margin-top: 20px;}.son {width: 100px;height: 100px;background-color: skyblue;}</style><div id="app"><h3>v-model修飾符 .trim .number</h3>姓名:<input v-model.trim="username" type="text"><br>年紀:<input v-model.number="age" type="text"><br><h3>@事件名.stop     →  阻止冒泡</h3><div @click="fatherFn" class="father"><div @click.stop="sonFn" class="son">兒子</div></div><h3>@事件名.prevent  →  阻止默認行為</h3><a @click.prevent href="http://www.baidu.com">阻止默認行為</a></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {username: '',age: '',},methods: {fatherFn () {alert('老父親被點擊了')},sonFn (e) {// e.stopPropagation()alert('兒子被點擊了')}}})</script>

2. v-bind對樣式控制的增強-操作class

為了方便開發者進行樣式控制, Vue 擴展了 v-bind 的語法,可以針對 class 類名style 行內樣式 進行控制 。

2.1語法:
<div> :class = "對象/數組">這是一個div</div>
2.2對象語法

當class動態綁定的是對象時,鍵就是類名,值就是布爾值,如果值是true,就有這個類,否則沒有這個類

<div class="box" :class="{ 類名1: 布爾值, 類名2: 布爾值 }"></div>

? 適用場景:一個類名,來回切換

2.3數組語法

當class動態綁定的是數組時 → 數組中所有的類,都會添加到盒子上,本質就是一個 class 列表

<div class="box" :class="[ 類名1, 類名2, 類名3 ]"></div>

使用場景:批量添加或刪除類

2.4代碼練習
 <style>.box {width: 200px;height: 200px;border: 3px solid #000;font-size: 30px;margin-top: 10px;}.pink {background-color: pink;}.big {width: 300px;height: 300px;}</style><div id="app"><!--綁定對象--><div class="box" :class="{ pink: true, big: false}">黑馬程序員</div><!--綁定數組--><div class="box" :class="['pink', 'big']">黑馬程序員</div></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {}})</script>

3. v-bind對有樣式控制的增強-操作style

3.1 語法
<div class="box" :style="{ CSS屬性名1: CSS屬性值, CSS屬性名2: CSS屬性值 }"></div>
3.2代碼練習
<style>.box {width: 200px;height: 200px;background-color: rgb(187, 150, 156);}</style><div id="app"><div class="box" :style="{ backgroundColor: 'pink', width: '300px'}"></div></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {}})</script>
3.3 進度條案例
 <style>.progress {height: 25px;width: 400px;border-radius: 15px;background-color: #272425;border: 3px solid #272425;box-sizing: border-box;margin-bottom: 30px;}.inner {width: 50%;height: 20px;border-radius: 10px;text-align: right;position: relative;background-color: #409eff;background-size: 20px 20px;box-sizing: border-box;transition: all 1s;}.inner span {position: absolute;right: -20px;bottom: -25px;}</style><div id="app"><div class="progress"><div class="inner" :style="{width: progress + '%'}"><span>{{progress}}%</span></div></div><button @click="progress=25">設置25%</button><button @click="progress=50">設置50%</button><button @click="progress=75">設置75%</button><button @click="progress=100">設置100%</button></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {progress: 50}})</script>

4. v-model在其他表單元素的使用

4.1講解內容:

常見的表單元素都可以用 v-model 綁定關聯 → 快速 獲取設置 表單元素的值

它會根據 控件類型 自動選取 正確的方法 來更新元素

輸入框  input:text   ——> value
文本域  textarea	 ——> value
復選框  input:checkbox  ——> checked
單選框  input:radio   ——> checked
下拉菜單 select    ——> value
...
4.2 代碼準備
 <style>textarea {display: block;width: 240px;height: 100px;margin: 10px 0;}</style><div id="app"><h3>小黑學習網</h3>姓名:<input type="text" v-model="userName"><br><br>是否單身:<input type="checkbox" v-model="isSinglehood"><br><br><!-- 前置理解:1. name:  給單選框加上 name 屬性 可以分組 → 同一組互相會互斥2. value: 給單選框加上 value 屬性,用于提交給后臺的數據結合 Vue 使用 → v-model-->性別: <input type="radio" name="gender" value="1" v-model="gender"><input type="radio" name="gender" value="2" v-model="gender"><br><br><!-- 前置理解:1. option 需要設置 value 值,提交給后臺2. select 的 value 值,關聯了選中的 option 的 value 值結合 Vue 使用 → v-model-->所在城市:<select v-model="cityId"><option value="101">北京</option><option value="102">上海</option><option value="103">成都</option><option value="104">南京</option></select><br><br>自我描述:<textarea v-model="text"></textarea><button>立即注冊</button></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {userName: '小白',isSinglehood: true,gender: '1',cityId: '104',text: '我是一個程序員'}})</script>

5. computed計算屬性

5.1 概念

基于現有的數據,計算出來的新屬性依賴的數據變化,自動重新計算。

5.2 語法
  1. 聲明在 computed 配置項中,一個計算屬性對應一個函數
  2. 使用起來和普通屬性一樣使用 {{ 計算屬性名}}
5.3 注意
  1. computed配置項和data配置項是同級
  2. computed中的計算屬性雖然是函數的寫法,但他依然是個屬性
  3. computed中的計算屬性不能和data中的屬性同名
  4. 使用computed中的計算屬性和使用data中的屬性是一樣的用法
  5. computed中計算屬性內部的this依然指向的是Vue實例
5.4 案例

比如我們可以使用計算屬性實現下面這個業務場景

在這里插入圖片描述

5.5 代碼準備
<style>table {border: 1px solid #000;text-align: center;width: 240px;}th,td {border: 1px solid #000;}h3 {position: relative;}</style><div id="app"><h3>小黑的禮物清單</h3><table><tr><th>名字</th><th>數量</th></tr><tr v-for="(item, index) in list" :key="item.id"><td>{{ item.name }}</td><td>{{ item.num }}個</td></tr></table><!-- 目標:統計求和,求得禮物總數 --><p>禮物總數:{{totalCount}} 個</p></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {// 現有的數據list: [{ id: 1, name: '籃球', num: 1 },{ id: 2, name: '玩具', num: 2 },{ id: 3, name: '鉛筆', num: 5 },]},computed: {totalCount() {return this.list.reduce((pre, item) => {pre += item.numreturn pre}, 0)}}})</script>

6. computed計算屬性 VS methods方法

6.1 computed計算屬性

作用:封裝了一段對于數據的處理,求得一個結果

語法:

  1. 寫在computed配置項中
  2. 作為屬性,直接使用
    • js中使用計算屬性: this.計算屬性
    • 模板中使用計算屬性:{{計算屬性}}
6.2 methods計算屬性

作用:給Vue實例提供一個方法,調用以處理業務邏輯

語法:

  1. 寫在methods配置項中
  2. 作為方法調用
    • js中調用:this.方法名()
    • 模板中調用 {{方法名()}} 或者 @事件名=“方法名”
6.3 計算屬性的優勢
  1. 緩存特性(提升性能)

    計算屬性會對計算出來的結果緩存,再次使用直接讀取緩存,

    依賴項變化了,會自動重新計算 → 并再次緩存

  2. methods沒有緩存特性

  3. 通過代碼比較

<style>table {border: 1px solid #000;text-align: center;width: 300px;}th,td {border: 1px solid #000;}h3 {position: relative;}span {position: absolute;left: 145px;top: -4px;width: 16px;height: 16px;color: white;font-size: 12px;text-align: center;border-radius: 50%;background-color: #e63f32;}</style><div id="app"><h3>小黑的禮物清單🛒<span>?</span></h3><table><tr><th>名字</th><th>數量</th></tr><tr v-for="(item, index) in list" :key="item.id"><td>{{ item.name }}</td><td>{{ item.num }}個</td></tr></table><p>禮物總數:{{ totalCount }} 個</p></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {// 現有的數據list: [{ id: 1, name: '籃球', num: 3 },{ id: 2, name: '玩具', num: 2 },{ id: 3, name: '鉛筆', num: 5 },]},computed: {totalCount () {let total = this.list.reduce((sum, item) => sum + item.num, 0)return total}}})</script>
6.4 總結

1.computed有緩存特性,methods沒有緩存

2.當一個結果依賴其他多個值時,推薦使用計算屬性

3.當處理業務邏輯時,推薦使用methods方法,比如事件的處理函數

7. 計算屬性的完整寫法

既然計算屬性也是屬性,能訪問,應該也能修改了?

  1. 計算屬性默認的簡寫,只能讀取訪問,不能 “修改”
  2. 如果要 “修改” → 需要寫計算屬性的完整寫法

在這里插入圖片描述

完整寫法代碼演示

 <div id="app">姓:<input type="text" v-model="firstName"><br>名:<input type="text" v-model="lastName"><br><p>姓名:</p><button @click="changeName">修改姓名</button>
</div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script>const app = new Vue({el: '#app',data: {firstName: '劉',lastName: '備'},computed: {fullName: {get() {return this.firstName + this.lastName},set(val) {this.firstName = val.slice(0, 1)this.lastName = val.slice(1)}}},methods: {changeName() {this.fullName = '呂小布'}}})</script>

8.watch偵聽器(簡單寫法)

8.1 作用:

? 監視數據變化,執行一些業務邏輯或異步操作

8.2 語法:
  1. watch同樣聲明在跟data同級的配置項中

  2. 簡單寫法: 簡單類型數據直接監視

  3. 完整寫法:添加額外配置項

    data: { words: '蘋果',obj: {words: '蘋果'}
    },watch: {// 該方法會在數據變化時,觸發執行數據屬性名 (newValue, oldValue) {一些業務邏輯 或 異步操作。 },'對象.屬性名' (newValue, oldValue) {一些業務邏輯 或 異步操作。 }
    }
    
8.3 偵聽器代碼準備(簡單寫法)
 <style>* {margin: 0;padding: 0;box-sizing: border-box;font-size: 18px;}#app {padding: 10px 20px;}.query {margin: 10px 0;}.box {display: flex;}textarea {width: 300px;height: 160px;font-size: 18px;border: 1px solid #dedede;outline: none;resize: none;padding: 10px;}textarea:hover {border: 1px solid #1589f5;}.transbox {width: 300px;height: 160px;background-color: #f0f0f0;padding: 10px;border: none;}.tip-box {width: 300px;height: 25px;line-height: 25px;display: flex;}.tip-box span {flex: 1;text-align: center;}.query span {font-size: 18px;}.input-wrap {position: relative;}.input-wrap span {position: absolute;right: 15px;bottom: 15px;font-size: 12px;}.input-wrap i {font-size: 20px;font-style: normal;}</style><div id="app"><!-- 條件選擇框 --><div class="query"><span>翻譯成的語言:</span><select><option value="italy">意大利</option><option value="english">英語</option><option value="german">德語</option></select></div><!-- 翻譯框 --><div class="box"><div class="input-wrap"><textarea v-model="obj.words"></textarea><span><i>??</i>文檔翻譯</span></div><div class="output-wrap"><div class="transbox">{{result}}</div></div></div></div><script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script><script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script><script>// 接口地址:https://applet-base-api-t.itheima.net/api/translate// 請求方式:get// 請求參數:// (1)words:需要被翻譯的文本(必傳)// -----------------------------------------------const app = new Vue({el: '#app',data: {// words: ''obj: {words: ''},result: ''},// 具體講解:(1) watch語法 (2) 具體業務實現watch: {'obj.words'(newValue) {clearTimeout(this.timer)this.timer = setTimeout(async () => {const res = await axios({url: 'https://applet-base-api-t.itheima.net/api/translate',params: {words: newValue}})console.log(res)this.result = res.data.data},300)}})</script>

9. watch偵聽器(完整寫法)

9.1 語法

完整寫法 —>添加額外的配置項

  1. deep:true 對復雜類型進行深度監聽
  2. immdiate:true 初始化 立刻執行一次
data: {obj: {words: '蘋果',lang: 'italy'},
},watch: {// watch 完整寫法對象: {deep: true, // 深度監視immdiate:true,//立即執行handler函數handler (newValue) {console.log(newValue)}}
}
9.2 需求

在這里插入圖片描述

  • 當文本框輸入的時候 右側翻譯內容要時時變化
  • 當下拉框中的語言發生變化的時候 右側翻譯的內容依然要時時變化
  • 如果文本框中有默認值的話要立即翻譯
9.3 代碼實現
 <script> const app = new Vue({el: '#app',data: {obj: {words: '小黑',lang: 'italy'},result: '', // 翻譯結果},watch: {obj: {deep: true, // 深度監視immediate: true, // 立刻執行,一進入頁面handler就立刻執行一次handler (newValue) {clearTimeout(this.timer)this.timer = setTimeout(async () => {const res = await axios({url: 'https://applet-base-api-t.itheima.net/api/translate',params: newValue})this.result = res.data.dataconsole.log(res.data.data)}, 300)}} }})</script>
9.4 總結

watch偵聽器的寫法有幾種?

1.簡單寫法

watch: {數據屬性名 (newValue, oldValue) {一些業務邏輯 或 異步操作。 },'對象.屬性名' (newValue, oldValue) {一些業務邏輯 或 異步操作。 }
}

2.完整寫法

watch: {// watch 完整寫法數據屬性名: {deep: true, // 深度監視(針對復雜類型)immediate: true, // 是否立刻執行一次handlerhandler (newValue) {console.log(newValue)}}
}

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

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

相關文章

WSL with NVIDIA Container Toolkit

一、wsl 下安裝 docker 會提示安裝 docekr 桌面版&#xff0c;所以直接安裝 docker 桌面版本即可 二、安裝 NVIDIA Container Toolkit NVIDIA Container Toolkit倉庫 https://github.com/NVIDIA/nvidia-container-toolkit?github.com/NVIDIA/nvidia-container-toolkit 安裝…

mysql下載

目錄 下載地址&#xff1a; 1.MSI安裝包下載 2.ZIP壓縮包下載 卸載MySQL&#xff1a; 下載地址&#xff1a; MySQL :: Download MySQL Community Server到mysql官網進行下載&#xff1a;MySQL :: Download MySQL Community Server &#xff08;下面二選一&#xff0c;選擇一…

基于Kubernetes部署MySQL主從集群

以下是一個基于Kubernetes部署MySQL主從集群的詳細YAML示例&#xff0c;包含StatefulSet、Service、ConfigMap和Secret等關鍵配置。MySQL主從集群需要至少1個主節點和多個從節點&#xff0c;這里使用 StatefulSet 初始化腳本 實現主從自動配置。 1. 創建 Namespace (可選) ap…

如何使用 GPT-4o 翻譯播客聲音

Voice Translation into Different Languages | OpenAI Cookbook 如何使用 GPT-4o 將播客翻譯并配音成您的母語 您是否曾想過將播客翻譯成您的母語&#xff1f;翻譯和配音音頻內容可以讓全球更多的觀眾獲取信息。而現在&#xff0c;借助 GPT-4o 的音頻輸入&#xff08;audio-i…

Lab17_ Blind SQL injection with out-of-band data exfiltration

文章目錄 前言&#xff1a;進入實驗室構造 payload 前言&#xff1a; 實驗室標題為&#xff1a; 帶外數據泄露的 SQL 盲注 簡介&#xff1a; 本實驗包含一個SQL盲目注入漏洞。應用程序使用跟蹤Cookie進行分析&#xff0c;并執行包含提交的Cookie值的SQL查詢。 SQL查詢是異…

深入解析 configService.addListener 使用中的注意事項

在使用 Nacos 的 configService.addListener 方法進行配置監聽時&#xff0c;為了確保程序的穩定性、可靠性以及高效性&#xff0c;有諸多注意事項需要我們關注。下面將對這些關鍵要點進行詳細闡述。 一、連接穩定性 1.1 網絡連接問題 Nacos 客戶端與服務端通過網絡進行通信&…

C/C++藍橋杯算法真題打卡(Day4)

一、P11041 [藍橋杯 2024 省 Java B] 報數游戲 - 洛谷 算法代碼&#xff1a; #include<bits/stdc.h> using namespace std;// 計算第 n 個滿足條件的數 long long findNthNumber(long long n) {long long low 1, high 1e18; // 二分查找范圍while (low < high) {lo…

【Python 數據結構 10.二叉樹】

目錄 一、二叉樹的基本概念 1.二叉樹的定義 2.二叉樹的特點 3.特殊的二叉樹 Ⅰ、斜樹 Ⅱ、滿二叉樹 Ⅲ、完全二叉樹 Ⅳ、完全二叉樹和滿二叉樹的區別 4.二叉樹的性質 5.二叉樹的順序存儲 Ⅰ、完全二叉樹 Ⅱ、非完全二叉樹 Ⅲ、稀疏二叉樹 6.二叉樹的鏈式存儲 7.二叉樹的遍歷概念…

Windows 系統 Docker Desktop 入門教程:從零開始掌握容器化技術

文章目錄 前言一、Docker 簡介二、Docker Desktop 安裝2.1 系統要求2.2 安裝步驟 三、Docker 基本概念四、Docker 常用命令五、實戰&#xff1a;運行你的第一個容器5.1 拉取并運行 Nginx 容器5.2 查看容器日志5.3 停止并刪除容器 六、總結 前言 隨著云計算和微服務架構的普及&…

可變參數與遞歸

可變參數與遞歸 可變參數 package method; ? public class Demo03 {public static void main(String[] args) {Demo03 demo03new Demo03();demo03.test(1,2,3);?}public void test (int... i){System.out.println(i[0]);//1System.out.println(i[1]);//2System.out.println(…

【redis】全局命令exists、del、expire、ttl(惰性刪除和定期刪除)

exists——判定 key 是否存在 語法&#xff1a; exists key [key...] # 返回值&#xff1a;key 存在的個數針對多個 key 來說&#xff0c;是非常有用的時間復雜度 O ( 1 ) O(1) O(1) Redis 組織這些 key 就是按照哈希表的方式來組織的。Redis 支持很多數據結構指的是 value …

系統架構設計師—系統架構設計篇—特定領域軟件體系結構

文章目錄 概述領域分類垂直域水平域 系統模型基本活動參與角色 概述 特定領域軟件架構&#xff08;Domain Specific Software Architecture&#xff0c;DSSA&#xff09;是在一個特定應用領域中&#xff0c;為一組應用提供組織結構參考的標準團建體系結構。 領域分類 垂直域…

OpenManus:優點突出,短板也明顯

最近&#xff0c;OpenManus 在 AI 領域掀起了一陣熱潮。作為開源版的智能代理軟件&#xff0c;它自誕生起就備受矚目。今天&#xff0c;咱們就來深入聊聊 OpenManus 在實際測試中的表現&#xff0c;看看它到底有哪些過人之處&#xff0c;又存在哪些不足。? 優點大起底? 開源…

VUE3項目的文檔結構分析

1. Vue 3 項目的文檔結構 Vue 3 項目通常基于 Vue CLI 或 Vite 等工具創建&#xff0c;其文檔結構如下&#xff1a; 常見目錄結構 my-vue-project/ ├── public/ # 靜態資源目錄 │ ├── index.html # 入口頁面 ├── src/ …

P8662 [藍橋杯 2018 省 AB] 全球變暖--DFS

P8662 [藍橋杯 2018 省 AB] 全球變暖--dfs 題目 解析講下DFS代碼 題目 解析 這道題的思路就是遍歷所有島嶼&#xff0c;判斷每一塊陸地是否會沉沒。對于這種圖的遍歷&#xff0c;我們首先應該想到DFS。 代碼的注意思想就是&#xff0c;在主函數中遍歷找出所有島嶼&#xff0c…

mmseg

系列文章目錄 文章目錄 系列文章目錄bug bug File "/public/home/rsinfo/project/mmsegmentation/mmseg/__init__.py", line 61, in <module>assert (mmcv_min_version < mmcv_version < mmcv_max_version), \ AssertionError: MMCV2.2.0 is used but i…

AI多模態教程:DeepSeek多模態模型解析及實踐指南

AIGCmagic社區知識星球是國內首個以AIGC全棧技術與商業變現為主線的學習交流平臺&#xff0c;涉及AI繪畫、AI視頻、大模型、AI多模態、數字人以及全行業AIGC賦能等100應用方向。星球內部包含海量學習資源、專業問答、前沿資訊、內推招聘、AI課程、AIGC模型、AIGC數據集和源碼等…

【銀河麒麟高級服務器操作系統實例】虛擬機橋接網絡問題分析及處理

更多銀河麒麟操作系統產品及技術討論&#xff0c;歡迎加入銀河麒麟操作系統官方論壇 https://forum.kylinos.cn 了解更多銀河麒麟操作系統全新產品&#xff0c;請點擊訪問 麒麟軟件產品專區&#xff1a;https://product.kylinos.cn 開發者專區&#xff1a;https://developer…

使用騰訊ncnn加速推理yolo v9對比opencv dnn

前面博客 【opencv dnn模塊 示例(25) 目標檢測 object_detection 之 yolov9 介】 紹了 yolov9 詳細使用方式&#xff0c;重參數化、導出端到端模型&#xff0c;使用 torch、opencv、tensorrt 以及 paddle 的測試。 由于存在移動端推理部署的需求&#xff0c;需要進行加速處理&…

前端小食堂 | Day10 - 前端路由の時空裂隙

??? 今日穿梭指南:兩種維度の路由宇宙 1. Hash 模式:錨點の量子隧道 // 手動創建路由監聽器 window.addEventListener(hashchange, () => {const path = location.hash.slice(1) || /; console.log(進入哈希宇宙:, path); renderComponent(path); }); // 編程…