02-Vue 計算屬性與監聽器與VUE-cli使用

1.計算屬性

<!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>計算屬性</title><script src="../js/vue.js"></script>
</head>
<body><div id="root">姓:<input type="text" v-model="firstName"><br><br>名:<input type="text" v-model="lastName"><br><br>姓名:<span>{{fullName}}</span></div><script>Vue.config.productionTip = false new Vue({el:'#root', data:{ firstName:'張',lastName:'三'},computed:{fullName:{get(){return this.firstName + '-' + this.lastName},set(value){const arr = value.split('-')this.firstName = arr[0]this.lastName = arr[1]}}}})</script>
</body>
</html>

效果:

總結:

計算屬性:

????????定義:要用的屬性不存在,需要通過已有屬性計算得來。

????????原理:底層借助了Objcet.defineproperty()方法提供的getter和setter。

????????get函數什么時候執行?

????????????????初次讀取時會執行一次
????????????????當依賴的數據發生改變時會被再次調用
????????優勢:與methods實現相比,內部有緩存機制(復用),效率更高,調試方便

備注:

計算屬性最終會出現在vm上,直接讀取使用即可
如果計算屬性要被修改,那必須寫set函數去響應修改,且set中要引起計算時依賴的數據發生改變
如果計算屬性確定不考慮修改,可以使用計算屬性的簡寫形式

new Vue({el:'#root', data:{ firstName:'張',lastName:'三'},computed:{fullName(){return this.firstName + '-' + this.lastName}}
})

2.監視屬性

2.1 監視屬性基本用法

<!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>監視屬性</title><script src="../js/vue.js"></script>
</head>
<body><div id="root"><h2>今天天氣好{{info}}!</h2><button @click="changeWeather">點擊切換天氣</button></div><script>Vue.config.productionTip = false new Vue({el:'#root', data:{ isHot:true,},computed:{info(){return this.isHot ? '炎熱' : '涼爽' }},methods:{changeWeather(){this.isHot = !this.isHot}},watch:{isHot:{immediate:true, //初始化時讓handler調用一下//handler什么時候調用?當isHot發生改變時handler(newValue,oldValue){console.log('isHot被修改了',newValue,oldValue)}}}})</script>
</body>
</html>

總結:

監視屬性watch:

  1. 當被監視的屬性變化時,回調函數自動調用
  2. 監視的屬性必須存在,才能進行監視
  3. 監視有兩種寫法:
    1. 創建Vue時傳入watch配置
    2. 通過vm.$watch監視
vm.$watch('isHot',{immediate:true,handler(newValue,oldValue){console.log('isHot被修改了',newValue,oldValue)}
})

?2.2 深度監視

<!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>深度監視</title><script src="../js/vue.js"></script>
</head>
<body><div id="root"><h3>a的值是:{{numbers.a}}</h3><button @click="numbers.a++">點我讓a+1</button><h3>b的值是:{{numbers.b}}</h3><button @click="numbers.b++">點我讓b+1</button></div><script>Vue.config.productionTip = false new Vue({el:'#root', data:{ isHot:true,numbers:{a:1,b:1,}},watch:{//監視多級結構中所有屬性的變化numbers:{deep:true,handler(){console.log('numbers改變了')}}//監視多級結構中某個屬性的變化/* 'numbers.a':{handler(){console.log('a被改變了')}} */}})</script>
</body>
</html>

總結:

深度監視:

  1. Vue中的watch默認不監測對象內部值的改變(一層)
  2. 在watch中配置deep:true可以監測對象內部值的改變(多層)

備注:

  1. Vue自身可以監測對象內部值的改變,但Vue提供的watch默認不可以
  2. 使用watch時根據監視數據的具體結構,決定是否采用深度監視

?2.3 監視屬性簡寫

如果監視屬性除了handler沒有其他配置項的話,可以進行簡寫。

<script type="text/javascript">Vue.config.productionTip = false //阻止 vue 在啟動時生成生產提示。const vm = new Vue({el:'#root',data:{isHot:true,},computed:{info(){return this.isHot ? '炎熱' : '涼爽'}},methods: {changeWeather(){this.isHot = !this.isHot}},watch:{//正常寫法isHot:{handler(newValue,oldValue){console.log('isHot被修改了',newValue,oldValue)}}, //簡寫isHot(newValue,oldValue){console.log('isHot被修改了',newValue,oldValue,this)}}})//正常寫法vm.$watch('isHot',{handler(newValue,oldValue){console.log('isHot被修改了',newValue,oldValue)}})//簡寫vm.$watch('isHot',function(newValue,oldValue){console.log('isHot被修改了',newValue,oldValue,this)})
</script>

2.4 監聽屬性VS計算屬性

總結:

computed和watch之間的區別:

  1. computed能完成的功能,watch都可以完成
  2. watch能完成的功能,computed不一定能完成,例如:watch可以進行異步操作

兩個重要的小原則:

  1. 所有被Vue管理的函數,最好寫成普通函數,這樣this的指向才是vm 或 組件實例對象
  2. 所有不被Vue所管理的函數(定時器的回調函數、ajax的回調函數等、Promise的回調函數),最好寫成箭頭函數,這樣this的指向才是vm 或 組件實例對象。

3. 綁定樣式

<style>.basic{width: 400px;height: 100px;border: 1px solid black;}.happy{border: 4px solid red;;background-color: rgba(255, 255, 0, 0.644);background: linear-gradient(30deg,yellow,pink,orange,yellow);}.sad{border: 4px dashed rgb(2, 197, 2);background-color: gray;}.normal{background-color: skyblue;}.atguigu1{background-color: yellowgreen;}.atguigu2{font-size: 30px;text-shadow:2px 2px 10px red;}.atguigu3{border-radius: 20px;}
</style>
<div id="root"><!-- 綁定class樣式--字符串寫法,適用于:樣式的類名不確定,需要動態指定 --><div class="basic" :class="mood" @click="changeMood">{{name}}</div> <br/><br/><!-- 綁定class樣式--數組寫法,適用于:要綁定的樣式個數不確定、名字也不確定 --><div class="basic" :class="classArr">{{name}}</div> <br/><br/><!-- 綁定class樣式--對象寫法,適用于:要綁定的樣式個數確定、名字也確定,但要動態決定用不用 --><div class="basic" :class="classObj">{{name}}</div> <br/><br/><!-- 綁定style樣式--對象寫法 --><div class="basic" :style="styleObj">{{name}}</div> <br/><br/><!-- 綁定style樣式--數組寫法 --><div class="basic" :style="styleArr">{{name}}</div>
</div>
<script type="text/javascript">Vue.config.productionTip = falseconst vm = new Vue({el:'#root',data:{name:'尚硅谷',mood:'normal',classArr:['atguigu1','atguigu2','atguigu3'],classObj:{atguigu1:false,atguigu2:false,},styleObj:{fontSize: '40px',color:'red',},styleObj2:{backgroundColor:'orange'},styleArr:[{fontSize: '40px',color:'blue',},{backgroundColor:'gray'}]},methods: {changeMood(){const arr = ['happy','sad','normal']const index = Math.floor(Math.random()*3)this.mood = arr[index]}},})
</script>

總結:

class樣式:

寫法:class="xxx",xxx可以是字符串、對象、數組

  • 字符串寫法適用于:類名不確定,要動態獲取
  • 對象寫法適用于:要綁定多個樣式,個數不確定,名字也不確定
  • 數組寫法適用于:要綁定多個樣式,個數確定,名字也確定,但不確定用不用

style樣式:

  • :style="{fontSize: xxx}"其中xxx是動態值
  • :style="[a,b]"其中a、b是樣式對象


?

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

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

相關文章

Android java基礎_反射

一.反射的基本概念 反射&#xff08;Reflection&#xff09;&#xff0c;Java 中的反射機制是指&#xff0c;Java 程序在運行期間可以獲取到一個對象的全部信息。 反射機制一般用來解決Java 程序運行期間&#xff0c;對某個實例對象一無所知的情況下&#xff0c;如何調用該對…

單源最短路的建圖方式

1129. 熱浪 - AcWing題庫 這道題可以有三種方法來做&#xff0c;樸素版的dijkstra、堆優化版的dijkstra和spfa算法 &#xff08;1&#xff09;spfa算法 這里的隊列用循環隊列&#xff0c;而不是像模板那樣用普通隊列是因為它的隊列長度不確定 import java.util.*;public class…

mysql 大數據量分批添加索引

先在測試環境測試&#xff0c;沒問題再上生產環境&#xff0c;避免生產環境數據庫負載過多而崩潰 創建存儲過程 DELIMITER //CREATE PROCEDURE batch_add_index_to_email() BEGINDECLARE done INT DEFAULT FALSE;DECLARE start_id INT DEFAULT 0;DECLARE end_id INT;DECLARE …

貝葉斯優化CNN分類(matlab代碼)

貝葉斯優化CNN分類matlab代碼 數據為Excel分類數據集數據。 數據集劃分為訓練集、驗證集、測試集&#xff0c;比例為8:1:1 數據處理: 在數據加載后&#xff0c;對數據進行了劃分&#xff0c;包括訓練集、驗證集和測試集&#xff0c;這有助于評估模型的泛化能力。 數據標準化…

13.7隊列的實戰(通過鏈表實現)

學個二叉樹&#xff0c;又要用上隊列的代碼&#xff0c;上學期學的隊列忘光光了&#xff0c;這不沒辦法回來復習咯 代碼&#xff1a; #include <stdio.h> #include <stdlib.h>typedef int ElemType; typedef struct LinkNode{ElemType data;struct LinkNode *next…

動態規劃(算法競賽、藍橋杯)--樹形DP沒有上司的舞會

1、B站視頻鏈接&#xff1a;E17 樹形DP Luogu P1352 沒有上司的舞會_嗶哩嗶哩_bilibili 題目鏈接&#xff1a;沒有上司的舞會 - 洛谷 #include <bits/stdc.h> using namespace std; const int N6010; int n; int w[N]; vector<int>a[N];//鄰接表 bool fa[N]; int…

011 Linux_線程概念與創建

前言 本文將會向你介紹線程的概念&#xff0c;以及線程是怎么被創建的 線程概念 一、進程是承擔系統資源的基本實體&#xff0c;線程是cpu調度的基本單位 首先&#xff0c;地址空間在邏輯上相當于進程的資源窗口&#xff0c; 每個進程都有這樣一個資源窗口。通過地址空間頁…

工控傳感器選型原則及舉例說明

工控傳感器選型原則及舉例說明 前言選型原則知識儲備光電傳感器接近開關和行程開關磁性開關模擬量傳感器類型及使用范圍數字量傳感器類型及使用范圍 選型舉例食品包裝箱運輸過程中的檢測有無倉庫提升伺服的極限位檢測產品高度檢測 前言 這里僅以數字量和模擬量信號的傳感器舉例…

Vue源碼系列講解——實例方法篇【二】(事件相關方法)

目錄 0.前言 1. vm.$on 1.1 用法回顧 1.2 內部原理 2. vm.$emit 2.1 用法回顧 2.2 內部原理 3. vm.$off 3.1 用法回顧 3.2 內部原理 4. vm.$once 4.1 用法回顧 4.2 內部原理 0.前言 與事件相關的實例方法有4個&#xff0c;分別是vm.$on、vm.$emit、vm.$off和vm.$o…

前端面試知識點合集

原型和原型鏈 任何函數都可以作為構造函數。當該函數通過 new 關鍵字調用的時候&#xff0c;就稱之為構造函數。 var Parent function(){}//定義一個函數&#xff0c;那它只是一個普通的函數&#xff0c;不能稱它為構造函數var instance new Parent(); //這時這個Parent就不…

C#理論 —— WPF 應用程序Console 控制臺應用

文章目錄 1. WPF 應用程序1.1 工程創建1.2 控件1.2.1 控件的公共屬性1.2.1 TextBox 文本框1.2.1 Button 按鈕 *. Console 控制臺應用1.1 工程創建 1. WPF 應用程序 1.1 工程創建 Visual Studio 中新建項目 - 選擇WPF 應用程序&#xff1b; 1.2 控件 1.2.1 控件的公共屬性 …

如何備份和恢復MySQL數據庫?有哪些常見的備份工具和策略?

如何備份和恢復MySQL數據庫&#xff1f;有哪些常見的備份工具和策略&#xff1f; 在數據庫管理中&#xff0c;備份和恢復是非常重要的環節&#xff0c;它們保障了數據的安全性和可恢復性。對于MySQL這樣的關系型數據庫管理系統&#xff0c;了解并實施有效的備份策略至關重要。…

Linux網絡編程——網絡基礎

Linux網絡編程——網絡基礎 1. 網絡結構模式1.1 C/S 結構1.2 B/S 結構 2. MAC 地址3. IP地址3.1 簡介3.2 IP 地址編址方式 4. 端口4.1 簡介4.2 端口類型 5. 網絡模型5.1 OSI 七層參考模型5.2 TCP/IP 四層模型 6. 協議6.1 簡介6.2 常見協議6.3 UDP 協議6.4 TCP 協議6.5 IP 協議6…

【兔子機器人】根據自身機器人參數修改simulink模型

關節電機 機體初始高度 &#xff01;&#xff01;&#xff01;接下來嘗試修改各腿的坐標朝向

LeetCode54題:螺旋矩陣(python3)

路徑的長度即為矩陣中的元素數量&#xff0c;當路徑的長度達到矩陣中的元素數量時即為完整路徑&#xff0c;將該路徑返回。 循環打印&#xff1a; “從左向右、從上向下、從右向左、從下向上” 四個方向循環打印。 class Solution:def spiralOrder(self, matrix: List[List[i…

怎么對App進行功能測試

測試人員常被看作是bug的尋找者&#xff0c;但你曾想過他們實際是如何開展測試的嗎&#xff1f;你是否好奇他們究竟都做些什么&#xff0c;以及他們如何在一個典型的技術項目中體現價值&#xff1f;本文將帶你經歷測試人員的思維過程&#xff0c;探討他們測試app時的各種考慮. …

Android和Linux的嵌入式開發差異

最近開始投入Android的懷抱。說來慚愧&#xff0c;08年就聽說這東西&#xff0c;當時也有同事投入去看&#xff0c;因為惡心Java&#xff0c;始終對這玩意無感&#xff0c;沒想到現在不會這個嵌入式都快要沒法搞了。為了不中年失業&#xff0c;所以只能回過頭又來學。 首先還是…

虛擬內存與mmap,brk

虛擬內存與mmap,brk 基本概念及相關術語 1.1 基本概念 虛擬內存使得應用程序認為它擁有連續的可用的內存&#xff08;一個連續完整的地址空間&#xff09;&#xff0c;而實際上&#xff0c;它通常是被分隔成多個物理內存碎片&#xff0c;還有部分暫時存儲在外部磁盤存儲器上&…

【C語言】linux內核generic_xdp_tx

一、中文注釋 /* 在執行通用XDP時&#xff0c;我們必須繞過qdisc層和網絡挖掘點&#xff0c;* 以匹配驅動內XDP的行為。*/ void generic_xdp_tx(struct sk_buff *skb, struct bpf_prog *xdp_prog) {struct net_device *dev skb->dev; // 獲取skb對應的網絡設備struct netd…

面試高頻率問答題目

索引&#xff1a; 主鍵索引&#xff1a;表的id &#xff08;唯一 且 不能為空&#xff09; 唯一索引&#xff1a;表User 假設有account 字段 &#xff0c;用戶名不重復 &#xff08;唯一 可以為空&#xff09; 復合索引&#xff1a;where() 的條件 用戶名&#xff0c;密碼 …