《WebGIS之Vue零基礎教程》(5)計算屬性與偵聽器

1 計算屬性

1) 什么是計算屬性

:::info 計算屬性就是基于現有屬性計算后的屬性

:::

2) 計算屬性的作用

計算屬性用于對原始數據的再次加工

3) 案例

:::warning **需求**

實現如下效果

:::

使用表達式實現
```html Document
請輸入一個字符串:

反轉后的字符串: {{msg.split('').reverse().join('')}}

<script>const vm = new Vue({el: '#app',data: {msg: '',},})
</script>

<h4 id="kqgQi">使用方法實現</h4>
```html
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><script src="../node_modules/vue/dist/vue.js"></script></head><body><!-- 需求: 實現字符串的反轉eg. abc 轉換成  cba --><div id="app">請輸入一個字符串: <input type="text" v-model="msg" /> <br /><!-- 反轉字符串的思路1. 取出字符串中的每個字符 msg.split('') 形成一個數組2. 反轉數據. msg.split('').reverse() 形成一個反轉數組3. 將反轉數組拼接. msg.split('').reverse().join('')--><!-- 不推薦使用方法原因: 沒有緩存, 每次調用方法, 代碼會執行一次--><h3>反轉后的字符串: {{reverseMsg()}}</h3><h3>反轉后的字符串: {{reverseMsg()}}</h3><h3>反轉后的字符串: {{reverseMsg()}}</h3><h3>反轉后的字符串: {{reverseMsg()}}</h3><h3>反轉后的字符串: {{reverseMsg()}}</h3></div><script>const vm = new Vue({el: '#app',data: {msg: '',},methods: {reverseMsg() {console.log('反轉函數被執行了...')// 返回 反轉后的字符串return this.msg.split('').reverse().join('')},},})</script></body>
</html>
使用計算屬性實現
```html Document
請輸入一個字符串:

反轉后的字符串: {{reverseMsg}}

反轉后的字符串: {{reverseMsg}}

反轉后的字符串: {{reverseMsg}}

反轉后的字符串: {{reverseMsg}}

反轉后的字符串: {{reverseMsg}}

<script>const vm = new Vue({el: '#app',data: {msg: '',},computed: {// 編寫一個函數, 這個函數會被做為該計算屬性的getterreverseMsg() {console.log('計算屬性被執行了...')// 該函數的返回值, 做為訪問計算屬性的結果return this.msg.split('').reverse().join('')},},})
</script>

<h3 id="kpi31">4) 特點</h3>
:::info
1. 有緩存
2. 調試方便:::<h3 id="UuqO0">5) 作業</h3>
![](https://cdn.nlark.com/yuque/0/2022/png/25807822/1654746466409-a900d15f-21e6-4709-bc4b-564f6a9f05a5.png)<h2 id="dZ1E9">2 偵聽器</h2>
<h3 id="XyPpp">1) 什么是偵聽器</h3>
:::info
可以通過watch配置項, 監聽data中已經存在的屬性的改變:::<h3 id="CIa7L">2) 語法</h3>
```javascript
watch: {// 監聽data中的firstName屬性firstName() {// 執行一系列的操作},
},

示例

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><script src="../node_modules/vue/dist/vue.global.js"></script></head><body><div id="app">姓: <input type="text" v-model="lastName" /> <br />名: <input type="text" v-model="firstName" /> <br />全名(偵聽器實現): {{fullName}}</div><script>const { createApp } = Vueconst vm = createApp({data() {return {lastName: '',firstName: '',fullName: '',}},watch: {// 偵聽lastName的變化, 當lastName變化時, 執行該函數lastName() {this.fullName = this.lastName + this.firstName},// 偵聽firstName的變化, 當firstName變化時, 執行該函數firstName() {this.fullName = this.lastName + this.firstName},},}).mount('#app')</script></body>
</html>

3) 特點

在watch對應的回調函數中, 可以獲取到`新值`和 `舊值`

示例

const vm = new Vue({el: '#app',data: {firstName: '',lastName: '',},// 使用watch這個配置項watch: {// 在watch對應的回調函數中, 可以得到新值和舊值// 對于簡單數據類型, 可以獲取新舊值// 對于引用數據類型, 不能獲取舊值firstName(newValue, oldValue) {// 一對多: 監聽某一個屬性的改變, 做一系列的操作console.log('firstName改變了...')console.log('新的值:', newValue)console.log('舊的值:', oldValue)},},
})

4) 深度監聽

默認情況下`watch`配置項只會對`data`中第一層的數據進行偵聽.

如果第一層的數據是引用類型(如, 數組, 對象). 需要開啟深度監聽

示例

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><script src="../node_modules/vue/dist/vue.global.js"></script></head><body><div id="app">姓: <input type="text" v-model="lastName" /> <br />名: <input type="text" v-model="firstName" /> <br /><!-- 偵聽器: 一因多果(關注一個已經存在的屬性的改變) --><!-- 1. 如果是基本類型數據, 可以獲取到新舊值2. 默認是淺層次的偵聽3. 如果是引用類型, 如果需要深層次數據的改變, 開啟深度偵聽-->全名(偵聽器實現): {{fullName}}</div><script>const { createApp } = Vueconst vm = createApp({data() {return {lastName: '',firstName: '',fullName: '',obj: { name: 'xiaoming' },}},watch: {// 偵聽lastName的變化, 當lastName變化時, 執行該函數lastName(newValue, oldValue) {console.log('新的值: ', newValue)console.log('舊的值: ', oldValue)this.fullName = this.lastName + this.firstName},// 偵聽firstName的變化, 當firstName變化時, 執行該函數firstName() {this.fullName = this.lastName + this.firstName},// obj() {//   console.log('obj被修改了')// },obj: {handler() {console.log('obj被修改了...')},deep: true,},},}).mount('#app')</script></body>
</html>

5) 回調執行的時機

:::tips 默認情況下

watch在DOM更新之前調用. 得到的是 DOM更新之前的數據

:::

可以通過flush: 'post'設置在DOM更新之后調用回調

示例

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><script src="../node_modules/vue/dist/vue.global.js"></script></head><body><div id="app">{{msg}}</div><script>const { createApp } = Vueconst vm = createApp({data() {return {msg: 'hello',}},watch: {// 默認情況下. watch在DOM更新之前調用. 得到的是 DOM更新之前的數據// msg() {//   console.log(app.innerHTML)// },msg: {handler() {console.log('更新之后的DOM', app.innerHTML)},flush: 'post',},},}).mount('#app')</script></body>
</html>

3 計算屬性 VS 偵聽器

1. 是否會在vm實例中掛載新屬性? 1. computed會 2. watch不會 2. 對應關系 1. computed是`多對一`, 可以同時監聽多個值改變, 最終計算得到一個新的屬性 2. watch是`一對多`, 主要監聽一個屬性的變化, 執行多種邏輯 3. 能否獲取新舊值? 1. computed不能 2. watch能

4 綜合作業

![](https://i-blog.csdnimg.cn/img_convert/90d0b1deadb5e0aff47a44340d3b36fb.png)

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

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

相關文章

洞悉 NGINX ngx_http_access_module基于 IP 的訪問控制實戰指南

一、模塊概述 ngx_http_access_module 是 NGINX 核心模塊之一&#xff0c;用于基于客戶端 IP 地址或 UNIX 域套接字限制訪問。它通過簡單的 allow/deny 規則&#xff0c;對請求進行最先匹配原則的過濾。與基于密碼&#xff08;auth_basic&#xff09;、子請求&#xff08;auth…

數據中臺-數據質量管理系統:從架構到實戰

一、數據質量管理系統核心優勢解析? ? (一)可視化驅動的敏捷數據治理? 在數據治理的復雜流程中,Kettle 的 Spoon 圖形化界面堪稱一把利器,為數據工程師們帶來了前所未有的便捷體驗。想象一下,你不再需要花費大量時間和精力去編寫冗長且復雜的 SQL 腳本,只需通過簡單…

數據分析之 商品價格分層之添加價格帶

在分析貨品數據的時候&#xff0c;我們會對商品的價格進行分層匯總&#xff0c;也叫價格帶&#xff0c;?? 一、價格帶的定義?? ??價格帶&#xff08;Price Band&#xff09;??&#xff1a;將商品按價格區間劃分&#xff08;如0-50元、50-100元、100-200元等&#xff…

Maven 依賴范圍(Scope)詳解

Maven 依賴范圍&#xff08;Scope&#xff09;詳解 Maven 是一個強大的項目管理工具&#xff0c;廣泛用于 Java 開發中構建、管理和部署應用程序。在使用 Maven 構建項目時&#xff0c;我們經常需要引入各種第三方庫或框架作為項目的依賴項。通過在 pom.xml 文件中的 <depe…

vue3實現v-directive;vue3實現v-指令;v-directive不觸發

文章目錄 場景&#xff1a;問題&#xff1a;原因&#xff1a;? 場景&#xff1a; 列表的操作列有按鈕&#xff0c;通過v-directive指令控制按鈕顯隱&#xff1b;首次觸發了v-directive指令&#xff0c;控制按鈕顯隱正常&#xff1b;但是再次點擊條件查詢后&#xff0c;列表數…

數據結構【樹和二叉樹】

樹和二叉樹 前言1.樹1.1樹的概念和結構1.2樹的相關術語1.3樹的表示方法1.4 樹形結構實際運用場景 2.二叉樹2.1二叉樹的概念和結構2.2二叉樹具備以下特點&#xff1a;2.3二叉樹分類 3.滿二叉樹4.完全二叉樹5.二叉樹性質6.附&#xff1a;樹和二叉樹圖示 前言 歡迎蒞臨姜行運主頁…

css面板視覺高度

css面板視覺高度 touch拖拽 在手機端有時候會存在實現touch上拉或者下拉的樣式操作 此功能實現可以參考&#xff1a; https://blog.csdn.net/u012953777/article/details/147465162?spm1011.2415.3001.5331 面板視覺高度 前提需求&#xff1a; 1、展示端分為兩部分&…

【Linux系統】詳解Linux權限

文章目錄 前言一、學習Linux權限的鋪墊知識1.Linux的文件分類2.Linux的用戶2.1 Linux下用戶分類2.2 創建普通用戶2.3 切換用戶2.4 sudo&#xff08;提升權限的指令&#xff09; 二、Linux權限的概念以及修改方法1.權限的概念2.文件訪問權限 和 訪問者身份的相關修改&#xff08…

路由器的基礎配置全解析:靜態動態路由 + 華為 ENSP 命令大全

&#x1f680; 路由器的基礎配置全解析&#xff1a;靜態&動態路由 華為 ENSP 命令大全 &#x1f310; 路由器的基本概念&#x1f4cd; 靜態路由配置&#x1f4e1; 動態路由協議&#xff1a;RIP、OSPF、BGP&#x1f5a5; 華為 ENSP 路由器命令大全&#x1f539; 路由器基本…

詳細圖解 Path-SAM2: Transfer SAM2 for digital pathology semantic segmentation

? 背景動機 數字病理中的語義分割&#xff08;semantic segmentation&#xff09;是非常關鍵的&#xff0c;比如腫瘤檢測、組織分類等。SAM&#xff08;Segment Anything Model&#xff09;推動了通用分割的發展&#xff0c;但在病理圖像上表現一般。 病理圖像&#xff08;Pa…

初識Redis · 哨兵機制

目錄 前言&#xff1a; 引入哨兵 模擬哨兵機制 配置docker環境 基于docker環境搭建哨兵環境 對比三種配置文件 編排主從節點和sentinel 主從節點 sentinel 模擬哨兵 前言&#xff1a; 在前文我們介紹了Redis的主從復制有一個最大的缺點就是&#xff0c;主節點掛了之…

HTTP header Cookie 和 Set-Cookie

RFC 6265: HTTP State Management Mechanismhttps://www.rfc-editor.org/rfc/rfc6265 Set-Cookie 響應頭 服務器使用 Set-Cookie 響應頭向客戶端&#xff08;通常是瀏覽器&#xff09;發送 Cookie。 基本格式&#xff1a; Set-Cookie: <cookie名稱><cookie值>;…

【Unity完整游戲開發案例】從0做一個太空大戰游戲

1.實現飛機移動控制 // 這個腳本實現控制飛機前后移動&#xff0c;方向由鼠標控制 //1.WS控制前后移動2.鼠標控制上下左右旋轉3.AD控制傾斜 using System.Collections; using System.Collections.Generic; using UnityEngine;public class PlayerController : MonoBehav…

【C++】C++11新特性(一)

文章目錄 列表初始化initializer_list左值引用和右值引用 列表初始化 在 C98 中可以使用{}對數組或者結構體元素進行統一的列表初始值設定 struct Point {int _x;int _y; }; int main() {int array1[] { 1, 2, 3, 4, 5 };int array2[5] { 0 };Point p { 1, 2 };return 0; …

小黑享受思考心流: 73. 矩陣置零

小黑代碼 class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""items []m len(matrix)n len(matrix[0])for i in range(m):for j in range(n):if not m…

精益數據分析(19/126):走出數據誤區,擁抱創業愿景

精益數據分析&#xff08;19/126&#xff09;&#xff1a;走出數據誤區&#xff0c;擁抱創業愿景 在創業與數據分析的探索之旅中&#xff0c;我們都渴望獲取更多知識&#xff0c;少走彎路。今天&#xff0c;我依然帶著和大家共同進步的想法&#xff0c;深入解讀《精益數據分析…

循環神經網絡RNN---LSTM

一、 RNN介紹 循環神經網絡&#xff08;Recurrent Neural Network&#xff0c;簡稱 RNN&#xff09;是一種專門用于處理序列數據的神經網絡&#xff0c;在自然語言處理、語音識別、時間序列預測等領域有廣泛應用。 傳統神經網絡 無法訓練出具有順序的數據。模型搭建時沒有考…

優考試V4.20機構版【附百度網盤鏈接】

優考試局域網考試系統具有強大的統計分析功能。優考試通過對考試數據進行統計分析&#xff0c;諸如考試分數分布&#xff0c;考試用時分布&#xff0c;錯排行等&#xff0c;讓你從整體上了解你的學員&#xff08;員工&#xff09;狀態&#xff0c; 同時你也可以對學員&#xff…

【Amazing晶焱科技高速 CAN Bus 傳輸與 TVS/ESD/EOS 保護,將是車用電子的生死關鍵無標題】

臺北國際車用電子展是亞洲地區重量級的車用電子科技盛會&#xff0c;聚焦于 ADAS、電動車動力系統、智慧座艙、人機界面、車聯網等領域。各大車廠與 Tier 1 供應鏈無不摩拳擦掌&#xff0c;推出最新技術與創新解決方案。 而今年&#xff0c;“智慧座艙” 無疑將成為全場焦點&am…

面試:結構體默認是對齊的嘛?如何禁止對齊?

是的。 結構體默認是對齊的?。結構體對齊是為了優化內存訪問速度和減少CPU訪問內存時的延遲。結構體對齊的規則如下&#xff1a; 某數據類型的變量存放的地址需要按有效對齊字節剩下的字節數可以被該數據類型所占字節數整除&#xff0c;char可以放在任意位置&#xff0c;int存…