最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡單聊聊Vue中的計算屬性和屬性偵聽

 更新時間:2021年10月05日 09:00:01   作者:給我一個div  
計算屬性用于處理復(fù)雜的業(yè)務(wù)邏輯,vue提供了檢測數(shù)據(jù)變化的一個屬性watch可以通過newVal獲取變化之后的值,這篇文章主要給大家介紹了關(guān)于Vue中計算屬性和屬性偵聽的相關(guān)資料,需要的朋友可以參考下

1. 計算屬性

定義

  • 計算屬性:要用的屬性不存在,要通過已有屬性計算得來,計算屬性要有一個全新的配置項computed
  • 對Vue來說,data里面的數(shù)據(jù)就是屬性,只要Vue中的數(shù)據(jù)改變,就會重新解析模板,遇到插值語法里的方法會重新調(diào)用

原理

  • 底層借助了Objcet.defineproperty方法提供的getter和setter。

get函數(shù)什么時候執(zhí)行?

  • 初次讀取時會執(zhí)行一次。
  • 當(dāng)依賴的數(shù)據(jù)發(fā)生改變時會被再次調(diào)用。

優(yōu)勢

  • 與methods實現(xiàn)相比,內(nèi)部有緩存機制(復(fù)用),效率更高,調(diào)試方便。

備注

  • 計算屬性最終會出現(xiàn)在vm(Vue實例)上,直接讀取使用即可。
  • 如果計算屬性要被修改,那必須寫set函數(shù)去響應(yīng)修改,且set中要引起計算時依賴的數(shù)據(jù)發(fā)生改變。

語法:  1.簡寫方式:

 computed: {
     "計算屬性名" () {
         return "值"
     }
 }

需求: 求2個數(shù)的和顯示到頁面上

<template>
  <div>
    <p>{{ num }}</p>
  </div>
</template>

<script>
export default {
  data(){
    return {
      a: 10,
      b: 20
    }
  },
  // 計算屬性:
  // 場景: 一個變量的值, 需要用另外變量計算而得來
  /*
    語法:
    computed: {
      計算屬性名 () {
        return 值
      }
    }
  */
 // 注意: 計算屬性和data屬性都是變量-不能重名
 // 注意2: 函數(shù)內(nèi)變量變化, 會自動重新計算結(jié)果返回
  computed: {
    num(){
      return this.a + this.b
    }
  }
}
</script>

<style>

</style>

語法:  2.完整寫法:

計算屬性寫成配置對象的格式:對象中用get和set函數(shù)

get的作用:  當(dāng)有人讀取fullName時,get就會被調(diào)用,且返回值就作為計算屬性的值  (get一定要寫return)

get什么時候調(diào)用? 1.初次讀取fullName時。 2.所依賴的數(shù)據(jù)發(fā)生變化時。

 get(){
                console.log('get被調(diào)用了')
                // console.log(this) //  此處的this是vm(Vue實例)
                return this.firstName + '-' + this.lastName
            },
            

set:當(dāng)計算屬性的值被修改時被調(diào)用 形參接收的是傳入的新值

  ...
  computed:{
      fullName:{
          //get有什么作用?當(dāng)有人讀取fullName時,get就會被調(diào)用,且返回值就作為fullName的值
          //get什么時候調(diào)用?1.初次讀取fullName時。2.所依賴的數(shù)據(jù)發(fā)生變化時。
          get(){
              console.log('get被調(diào)用了')
              // console.log(this) //此處的this是vm
              return this.firstName + '-' + this.lastName
          },
          //set什么時候調(diào)用? 當(dāng)fullName被修改時。
          set(value){
              console.log('set',value)
              const arr = value.split('-')
              this.firstName = arr[0]
              this.lastName = arr[1]
          }
      }
  }
})    

2. 監(jiān)視(偵聽)屬性

<!-- 綁定事件的時候:@xxx="yyy" yyy可以寫一些簡單的語句 -->
<button @click="isHot = !isHot">切換天氣</button>

1. 監(jiān)視屬性watch:

當(dāng)被監(jiān)視的屬性變化時, handler回調(diào)函數(shù)自動調(diào)用, 進行相關(guān)操作

監(jiān)視的屬性必須存在,才能進行監(jiān)視?。?/p>

      ...
      // 寫法1. 傳入watch配置 偵聽ishot屬性
      
      watch:{
          isHot:{
              immediate:true, //初始化時讓handler調(diào)用一下
              
              //handler什么時候調(diào)用?當(dāng)isHot發(fā)生改變時。
              
              handler(newValue,oldValue){
                  console.log('isHot被修改了',newValue,oldValue)
              }
          }
      }
  })
  
  
  // 寫法2. 通過vm.$watch監(jiān)視
vm.$watch('isHot',{
   immediate:true, //初始化時讓handler調(diào)用一下,默認是false
   //handler什么時候調(diào)用?當(dāng)isHot發(fā)生改變時。
   handler(newValue,oldValue){ // 有兩個參數(shù),一個是新值,一個是舊值
   	console.log('isHot被修改了',newValue,oldValue)
   }
})

2. 深度監(jiān)視

深度監(jiān)視:

  • 1)Vue中的watch默認不監(jiān)測對象內(nèi)部值的改變(一層)。
  • 2)配置deep:true可以監(jiān)測對象內(nèi)部值改變(多層)。

備注:

  • 1)Vue自身可以監(jiān)測對象內(nèi)部值的改變,但Vue提供的watch默認不可以!
  • 2)使用watch時根據(jù)數(shù)據(jù)的具體結(jié)構(gòu),決定是否采用深度監(jiān)視。
data:{
	isHot:true,
	numbers:{
		a:1,
		b:1
	}
},
watch:{
	// 監(jiān)視多級結(jié)構(gòu)中某個屬性的變化(原始寫法是要加引號的,簡寫可以不加,但這種情況要加,否則報錯)
	/* 'numbers.a':{
		handler(){
			console.log('a被改變了')
		}
	} */
	//監(jiān)視多級結(jié)構(gòu)中所有屬性的變化
	numbers:{
		deep:true, // 如果不開啟這個,那監(jiān)測的就是numbers的地址是否有變化
		handler(){
			console.log('numbers改變了')
		}
	}
}

監(jiān)視屬性-簡寫

當(dāng)監(jiān)視屬性中只有handler()而不需要開啟其他配置項時才能簡寫

watch:{
	isHot(newValue,oldValue){
		console.log('isHot被修改了',newValue,oldValue,this)
	}
}

/* vm.$watch('isHot',function (newValue,oldValue) {
	console.log('isHot被修改了',newValue,oldValue,this)
}) */

3. 區(qū)別和原則

computed和watch之間的區(qū)別

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

兩個重要的小原則

  • 所有被Vue管理的函數(shù),最好寫成普通函數(shù),這樣this的指向才是vm 或 組件實例對象。
  • 所有不被Vue所管理的函數(shù)(定時器的回調(diào)函數(shù)、ajax的回調(diào)函數(shù)等、Promise的回調(diào)函數(shù)),最好寫成箭頭函數(shù),這樣this的指向才是vm 或 組件實例對象。
watch:{
	firstName(val){
		setTimeout(()=>{
			console.log(this) //vue實例對象,若用普通函數(shù)則返回Window
			this.fullName = val + '-' + this.lastName
		},1000);
	},
	lastName(val){
		this.fullName = this.firstName + '-' + val
	}
}

總結(jié)

到此這篇關(guān)于Vue中計算屬性和屬性偵聽的文章就介紹到這了,更多相關(guān)Vue計算屬性和屬性偵聽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue模板語法-插值詳解

    vue模板語法-插值詳解

    這篇文章主要介紹了vue模板語法-插值,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2017-03-03
  • vue init webpack myproject構(gòu)建項目 ip不能訪問的解決方法

    vue init webpack myproject構(gòu)建項目 ip不能訪問的解決方法

    下面小編就為大家分享一篇vue init webpack myproject構(gòu)建項目 ip不能訪問的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue.js實現(xiàn)圖片的隨意拖動方法

    Vue.js實現(xiàn)圖片的隨意拖動方法

    下面小編就為大家分享一篇Vue.js實現(xiàn)圖片的隨意拖動方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue3?vite配置css?的sourceMap及文件引用配置別名的過程

    Vue3?vite配置css?的sourceMap及文件引用配置別名的過程

    這篇文章主要介紹了Vue3 vite配置css的sourceMap,及文件引用配置別名的過程,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • vue實現(xiàn)簡單瀑布流布局

    vue實現(xiàn)簡單瀑布流布局

    這篇文章主要為大家詳細介紹了vue實現(xiàn)簡單瀑布流布局,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 如何構(gòu)建 vue-ssr 項目的方法步驟

    如何構(gòu)建 vue-ssr 項目的方法步驟

    這篇文章主要介紹了如何構(gòu)建 vue-ssr 項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Vue+UpLoad實現(xiàn)上傳預(yù)覽和刪除圖片的實踐

    Vue+UpLoad實現(xiàn)上傳預(yù)覽和刪除圖片的實踐

    本文主要介紹了Vue+UpLoad實現(xiàn)上傳預(yù)覽和刪除圖片的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • vue實現(xiàn)富文本編輯器詳細過程

    vue實現(xiàn)富文本編輯器詳細過程

    Vue富文本的實現(xiàn)可以使用一些現(xiàn)成的第三方庫,如Quill、Vue-quill-editor、wangEditor等,這篇文章主要給大家介紹了關(guān)于vue實現(xiàn)富文本編輯器的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • Vue中四種操作dom方法保姆級講解

    Vue中四種操作dom方法保姆級講解

    這篇文章主要介紹了Vue中四種操作dom方法,首先,在vue中強烈禁用原生與jquery來操作DOM元素。我們要充分的利用vue的優(yōu)勢:MVVM,在vue中程序員幾乎不操作DOM,只需要維護好數(shù)據(jù)即可,vue給程序員提供ref引用,不調(diào)用api直接獲取元素組件的使用
    2023-02-02
  • vue項目npm install失敗的問題解決方案

    vue項目npm install失敗的問題解決方案

    本文主要介紹了vue項目npm install失敗的問題解決方案,文中通過圖文示例介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01

最新評論

吉林省| 临泽县| 丹阳市| 晴隆县| 修武县| 理塘县| 夏津县| 高青县| 博白县| 盘锦市| 鄢陵县| 绍兴县| 上饶市| 嫩江县| 金沙县| 且末县| 裕民县| 广东省| 兴业县| 哈尔滨市| 子长县| 临桂县| 邵阳市| 高邑县| 栖霞市| 天祝| 屏东市| 西充县| 望城县| 潢川县| 五河县| 绥滨县| 柞水县| 璧山县| 三门县| 通化县| 长宁县| 原平市| 鹤山市| 宣汉县| 酒泉市|