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

Vue中監(jiān)視屬性和計(jì)算屬性區(qū)別解析

 更新時間:2022年10月28日 17:00:12   作者:瀾璨  
這篇文章主要介紹了Vue中監(jiān)視屬性和計(jì)算屬性區(qū)別,通過本文學(xué)習(xí)大家知道computed與watch配置項(xiàng)問題,computed能完成的功能,watch都可以完成,本文通過實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下

計(jì)算屬性

顧名思義,計(jì)算屬性就是計(jì)算出來的屬性,英文名兒computed
這里要和data和methods里的東西區(qū)分,data里的屬性,methods里的函數(shù),你寫的都會原封不動放到vm里,但是computed里面的東西寫的是對象,最后放到vm里的是這個對象的名,值是get里的返回值。

下面看下Vue中監(jiān)視屬性和計(jì)算屬性區(qū)別。

需求

我們將計(jì)算屬性的案例使用watch寫一遍

需求一攬

  • 兩個輸入框
  • 下方一個全名
  • 要求輸入框內(nèi)容發(fā)生變化的時候,全名也跟著變化

使用watch實(shí)現(xiàn)

自實(shí)現(xiàn)

  • 既然要使用深度監(jiān)視,那么我們就需要在data當(dāng)中準(zhǔn)備一個對象屬性
data:{
 // 全名
 fullname:{
    full:""
    name:""
},
userName:""
},

  • 我們的深度監(jiān)視針對的就是這個fullName
  • 我們在data當(dāng)中定義另一個變量userName,這個變量可以理解為計(jì)算屬性,但是這里我們不使用computed配置項(xiàng)

準(zhǔn)備工作

html

<!-- 創(chuàng)建一個容器 -->
    <form class="app">
        <input type="button" value="重置" @click="reset">
        <!-- 差值語法 == v-model -->
        <div class="box" >
            <div class="title">深度監(jiān)視</div>
            請輸入:<input type="text" v-model="fullName.full"><br>
            請輸入:<input type="text" v-model="fullName.name">
            <!-- 使用深度監(jiān)視 -->
            <div class="content">{{userName}}</div>
        </div>
    </form>

js

<script>
    var vm = new Vue({
      el: '.app',
      data: {
        // 全名
        fullName:{
            full:"",
            name:""
        },
        userName:""
      },
      methods:{
        // 清除fullName的值
        reset(){
            this.fullName.full = ""
            this.fullName.name = ""
        }
      },
      // 對fullName進(jìn)行監(jiān)視
      watch:{
        fullName:{
            deep:true,
            handler(){ 
                this.userName = this.fullName.full + "-" + this.fullName.name
            }
        }
      }
      
    });
</script>
  • 我們開啟了深度監(jiān)視,當(dāng)fullName內(nèi)部值發(fā)生改變
  • 那么handler就會被調(diào)用
  • 因?yàn)関-model與input當(dāng)中的value進(jìn)行了雙向綁定
    • 所以當(dāng)期發(fā)生變化的時候,data當(dāng)中的full與name也會跟著變化
  • 我們在fullName的深度監(jiān)視中能夠同步獲得data當(dāng)中已經(jīng)發(fā)生改變的full與name
  • 在handler當(dāng)中將userName的值,對其進(jìn)行加法運(yùn)算
this.userName = this.fullName.full + "-" + this.fullName.name

  • 我感覺這樣有點(diǎn)麻煩,看老師怎么做的吧

測試

新需求

  • 當(dāng) 姓(full) 發(fā)生變化的時候,這個全名(userName),延遲一秒更新
  • 不過這樣的話,那么就需要對full與name單獨(dú)監(jiān)視了
// 對fullName進(jìn)行監(jiān)視
      watch:{
        'fullName.full':{
            handler(newValue){
                // 新增一個定時器
                setTimeout(()=>{
                    this.userName = newValue + "-" + this.fullName.name
                },1000)
            }
        },
        'fullName.name':{
            handler(newValue){
                this.userName = this.fullName.full + "-" + newValue;
            }
        }
      }

注意點(diǎn)

  • setTimeout這個函數(shù),是js模塊當(dāng)中定時器模塊所管理的一個函數(shù)
  • 它的this是window
  • 我們這個需求當(dāng)中,setTimeout是vue當(dāng)中,一個監(jiān)聽屬性的handler回調(diào)當(dāng)中的內(nèi)容
  • 那么這個時候如果不寫成箭頭函數(shù),那么this的指向就是window
  • 但是寫了箭頭函數(shù),那么setTimeout的this指向就沒有了
  • 沒有怎么辦?往上一級找嘛,上一級是誰?handler嘛,handler的this是誰?vue嘛

測試

在computed當(dāng)中書寫

是不能夠通過異步請求來去維護(hù)數(shù)據(jù)的

  • 這倆配置項(xiàng)各有千秋,但是我個人覺得watch來書寫這個需求的時候,會比較麻煩
  • 關(guān)于計(jì)算屬性
    • 在我確認(rèn)自己不需要對fullName這個整體進(jìn)行修改的時候,那么我只需要一行代碼即可完成這個需求
//配置計(jì)算屬性
computed:{
    //完整寫法
    /* fullname:{...
    // 簡寫形式
    /*fullName:funaction(){...
    fullName(){
      return this.full + "-" + this.name
  }
}

  • 關(guān)于監(jiān)視屬性
    • 我得親自去監(jiān)視姓和名的變化,或者說進(jìn)行深度監(jiān)視
    • 然后在handler當(dāng)中去修改
// 對fullName進(jìn)行監(jiān)視
watch:{
 fullName:{
     deep:true,
     handler(){
          this.userName = this.fullName.full + "-" +this.fullName.name
	  }
	 }
}

總結(jié)

computed與watch配置項(xiàng)

  • computed能完成的功能,watch都可以完成
  • watch能完成的功能,computed不一定能完成(參考異步)
  • 典中典
    • vue所管理的函數(shù),最好寫成普通函數(shù),因?yàn)閠his的指向是vue或組件實(shí)例對象,別人幫我們指定好了
    • 所有不被vue所管理的函數(shù)(定時器回調(diào),ajax回調(diào)),最好寫成箭頭函數(shù)
      • 這樣this的指向才能是 vm 或者 組件實(shí)例對象,這樣才能向上查找,向上兼容

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

相關(guān)文章

  • Vue實(shí)現(xiàn)瀏覽器打印功能的代碼

    Vue實(shí)現(xiàn)瀏覽器打印功能的代碼

    這篇文章主要介紹了Vue實(shí)現(xiàn)瀏覽器打印功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • vue中過濾器的用法

    vue中過濾器的用法

    這篇文章介紹了vue中過濾器的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • Vue實(shí)例中el和data的兩種寫法小結(jié)

    Vue實(shí)例中el和data的兩種寫法小結(jié)

    這篇文章主要介紹了Vue實(shí)例中el和data的兩種寫法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-11-11
  • 手把手教你用vue3開發(fā)一個打磚塊小游戲

    手把手教你用vue3開發(fā)一個打磚塊小游戲

    這篇文章主要給大家介紹了關(guān)于如何利用vue3開發(fā)一個打磚塊小游戲的相關(guān)資料,通過一個小游戲?qū)嵗梢钥焖倭私鈜ue3開發(fā)小游戲的流程,需要的朋友可以參考下
    2021-07-07
  • Vue+Antv?F2實(shí)現(xiàn)層疊柱狀圖

    Vue+Antv?F2實(shí)現(xiàn)層疊柱狀圖

    這篇文章主要為大家詳細(xì)介紹了Vue+Antv?F2實(shí)現(xiàn)層疊柱狀圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue實(shí)現(xiàn)二維碼掃碼功能(帶樣式)

    vue實(shí)現(xiàn)二維碼掃碼功能(帶樣式)

    最近接了一個移動端的項(xiàng)目,實(shí)現(xiàn)微信掃碼功能,今天小編利用這個平臺給大家分享vue實(shí)現(xiàn)二維碼掃描功能的實(shí)現(xiàn)代碼,需要的朋友參考下吧
    2021-08-08
  • vue-cli創(chuàng)建的項(xiàng)目,配置多頁面的實(shí)現(xiàn)方法

    vue-cli創(chuàng)建的項(xiàng)目,配置多頁面的實(shí)現(xiàn)方法

    下面小編就為大家分享一篇vue-cli創(chuàng)建的項(xiàng)目,配置多頁面的實(shí)現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • vue Cli 環(huán)境刪除與重裝教程 - 版本文檔

    vue Cli 環(huán)境刪除與重裝教程 - 版本文檔

    這篇文章主要介紹了vue Cli 環(huán)境刪除與重裝教程 - 版本文檔,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue3使用Element-plus的el-pagination分頁組件時無法顯示中文

    vue3使用Element-plus的el-pagination分頁組件時無法顯示中文

    本文主要介紹了vue3使用Element-plus的el-pagination分頁組件時無法顯示中文,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • vue倒計(jì)時刷新頁面不會從頭開始的解決方法

    vue倒計(jì)時刷新頁面不會從頭開始的解決方法

    在本篇文章里小編給大家整理的是關(guān)于vue倒計(jì)時刷新頁面不會從頭開始的解決方法,需要的朋友們參考下。
    2020-03-03

最新評論

勃利县| 香港 | 新余市| 诏安县| 金溪县| 越西县| 荥经县| 甘德县| 楚雄市| 二连浩特市| 清原| 高雄市| 平武县| 黎川县| 潞西市| 桐城市| 高雄县| 庐江县| 凤翔县| 通州市| 崇左市| 富裕县| 砚山县| 榆社县| 梧州市| 海兴县| 景德镇市| 米脂县| 固镇县| 黔江区| 蒙山县| 诸城市| 鹿邑县| 英德市| 大英县| 唐河县| 内黄县| 鞍山市| 固阳县| 乐亭县| 准格尔旗|