亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

簡(jiǎn)單聊聊Vue中的計(jì)算屬性和屬性偵聽(tīng)

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

1. 計(jì)算屬性

定義

  • 計(jì)算屬性:要用的屬性不存在,要通過(guò)已有屬性計(jì)算得來(lái),計(jì)算屬性要有一個(gè)全新的配置項(xiàng)computed
  • 對(duì)Vue來(lái)說(shuō),data里面的數(shù)據(jù)就是屬性,只要Vue中的數(shù)據(jù)改變,就會(huì)重新解析模板,遇到插值語(yǔ)法里的方法會(huì)重新調(diào)用

原理

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

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

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

優(yōu)勢(shì)

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

備注

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

語(yǔ)法:  1.簡(jiǎn)寫方式:

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

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

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

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

<style>

</style>

語(yǔ)法:  2.完整寫法:

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

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

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

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

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

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

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

<!-- 綁定事件的時(shí)候:@xxx="yyy" yyy可以寫一些簡(jiǎn)單的語(yǔ)句 -->
<button @click="isHot = !isHot">切換天氣</button>

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

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

監(jiān)視的屬性必須存在,才能進(jìn)行監(jiān)視!!

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

2. 深度監(jiān)視

深度監(jiān)視:

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

備注:

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

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

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

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可以進(jìn)行異步操作。

兩個(gè)重要的小原則

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

總結(jié)

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

相關(guān)文章

  • element ui 表格動(dòng)態(tài)列顯示空白bug 修復(fù)方法

    element ui 表格動(dòng)態(tài)列顯示空白bug 修復(fù)方法

    今天小編就為大家分享一篇element ui 表格動(dòng)態(tài)列顯示空白bug 修復(fù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • Vue純前端實(shí)現(xiàn)導(dǎo)出Excel并修改樣式

    Vue純前端實(shí)現(xiàn)導(dǎo)出Excel并修改樣式

    這篇文章主要為大家詳細(xì)介紹了Vue如何利用xlsx-style庫(kù)實(shí)現(xiàn)導(dǎo)出Excel并修改樣式的功能,文中的示例代碼講解詳細(xì),有需要的可以參考下
    2024-01-01
  • vue中使用@change的方法

    vue中使用@change的方法

    @change 是 Vue.js 中用于監(jiān)聽(tīng)表單元素值變化的事件處理器,很多組件有@change事件,那到底如何獲取到當(dāng)前的參數(shù)呢?本文給大家詳細(xì)講解,感興趣的朋友一起看看吧
    2023-11-11
  • vue-cli-service build 環(huán)境設(shè)置方式

    vue-cli-service build 環(huán)境設(shè)置方式

    這篇文章主要介紹了vue-cli-service build 環(huán)境設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-01-01
  • vue+elementUI中表格高亮或字體顏色改變操作

    vue+elementUI中表格高亮或字體顏色改變操作

    這篇文章主要介紹了vue+elementUI中表格高亮或字體顏色改變操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • vue利用Moment插件格式化時(shí)間的實(shí)例代碼

    vue利用Moment插件格式化時(shí)間的實(shí)例代碼

    Moment.js 是一個(gè) JavaScript 日期處理類庫(kù),用于解析、檢驗(yàn)、操作、以及顯示日期。這篇文章主要給大家介紹了關(guān)于vue利用Moment插件格式化時(shí)間的相關(guān)資料,需要的朋友可以參考下
    2021-05-05
  • vue3調(diào)度器scheduler功能和用法詳解

    vue3調(diào)度器scheduler功能和用法詳解

    調(diào)度器是vue3響應(yīng)式系統(tǒng)中一個(gè)非常重要的特性,可調(diào)度性指的是當(dāng)trigger 動(dòng)作觸發(fā)副作用函數(shù)重新執(zhí)行時(shí),有能力決定副作用函數(shù)執(zhí)行的時(shí)機(jī)、次數(shù)以及方式,本文通過(guò)代碼示例給大家介紹調(diào)度器是什么,有什么功能,怎么使用,感興趣的同學(xué)可以借鑒閱讀
    2023-06-06
  • Vue v-model組件封裝(類似彈窗組件)

    Vue v-model組件封裝(類似彈窗組件)

    這篇文章主要介紹了Vue中的 v-model組件封裝(類似彈窗組件),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • vue watch深度監(jiān)聽(tīng)對(duì)象實(shí)現(xiàn)數(shù)據(jù)聯(lián)動(dòng)效果

    vue watch深度監(jiān)聽(tīng)對(duì)象實(shí)現(xiàn)數(shù)據(jù)聯(lián)動(dòng)效果

    這篇文章主要介紹了vue watch深度監(jiān)聽(tīng)對(duì)象實(shí)現(xiàn)數(shù)據(jù)聯(lián)動(dòng)的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • 詳解vue-router 路由元信息

    詳解vue-router 路由元信息

    本篇文章主要介紹了vue-router 路由元信息,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09

最新評(píng)論