91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue的計算屬性API怎么寫

發布時間:2022-08-09 15:55:08 來源:億速云 閱讀:184 作者:iii 欄目:編程語言

這篇文章主要講解了“Vue的計算屬性API怎么寫”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Vue的計算屬性API怎么寫”吧!

Vue模板的表達式語法僅支持單個表達式,用于簡單運算;對于復雜的邏輯計算應當使用計算屬性computed。

computed可以依賴(計算)props、data、vuex的數據,即可以聲明了一個計算屬性,令其響應props/data/vuex的數據變化,返回一個經過某種計算的結果。

計算屬性的寫法

computed屬性的屬性值可以是函數或者對象
1、屬性值是函數,這時候計算屬性只有 getter

<div id="app">
    {{fullName}}
</div>
<script>
let vm = new Vue({
  el: '#app',
  data: {
    firstName: 'Foo',
    lastName: 'Bar'
  },
  computed: {
    fullName () {
      return this.firstName + ' ' + this.lastName
    }
  }
})
</script>

Vue的計算屬性API怎么寫
2、屬性值是對象
computed的屬性值是對象時,對象的屬性屬性可以配置get和set方法,通過這種方式可以給計算屬性提供一個 setter。

fullName: {
   get () {
     return this.firstName + ' ' + this.lastName   },
   set (newValue) {
     const names = newValue.split(' ')
     this.firstName = names[0]
     this.lastName = names[names.length - 1]
   }
 }

Vue的計算屬性API怎么寫

計算屬性支持緩存

在視圖發生了變化,而計算屬性所依賴的數據沒有變化的情況下,會直接從緩存中取值。

下面的例子中計算屬性messageLength和方法getMessageLength實現相同的功能,在通過點擊按鈕更新視圖時,會發現方法getMessageLength會被執行,顯然在這種情況下使用計算屬性比方法性能更好。

<div id="app">
    {{messageLength}}-{{getMessageLength()}}
    <button @click="onClick">點擊{{i}}</button>
</div>
<script>
let vm = new Vue({
  el: '#app',
  data: {
    message: 'Hello world',
    i: 0
  },
  computed: {
    messageLength () {
      console.log('messageLength執行了')
      return this.message.length
    }
  },
  methods: {
    getMessageLength () {
      console.log('getMessageLength執行了')
      return this.message.length
    },
    onClick () {
      this.i++
    }
  }
})
</script>

計算屬性傳參

在Vue實例中,計算屬性以屬性的方式存在,如果要傳參,需要使用閉包將屬性值改為一個函數
Vue的計算屬性API怎么寫

computed: {
  fullName () {
    return function (maxLength) {
      return (this.firstName + ' ' + this.lastName).substring(0, maxLength)
    }
  }}

這種情況下,使用計算屬性與使用方法等效。

computed屬性與watch屬性

計算屬性可以響應Vue 實例的數據變動,watch屬性同樣可以觀察和響應 Vue 實例上的數據變動。
watch可以監聽props、data和computed中的數據變化,并執行一個函數。
使用時:
computed是用來計算的,它要求返回一個結果,在調用的時候不需要加括號,它會根據一個或多個依賴自動緩存,如果依賴不變,computed不會自動計算;
watch是用來監聽的,一次只能監聽一個數據,監聽的數據變化了,就去執行函數,它有兩個選項:

  • immediate表示在組件第一次渲染的時候是否要執行這個函數,默認為false。

  • deep表示監聽一個對象內部屬性的變化,默認為false.

實現異步計算

一、computed屬性無法返回異步操作的結果,但可以依賴Vuex中的數據,故通過返回store.state可以獲得異步操作的結果

二、通過vue-async-computed插件可以實現異步計算屬性,list屬性將被賦值為一個Promise,顯然不是我們需要的結果

import Vue from 'vue'import AsyncComputed from 'vue-async-computed'import axios from 'axios'Vue.use(AsyncComputed)export default {
  name: 'MediaIndex',
  data () {
    return {
      pageNo: 1
    }
  },
  computed: {
    list () {
      return axios(`https://www.fastmock.site/mock/d6b39fde63cbe98a4f2fb92ff5b25a6d/api/products?pageNo=${this.pageNo}`)
        .then(res => res.data)
    }
  },
  asyncComputed: {
    asyncList () {
      return axios(`https://www.fastmock.site/mock/d6b39fde63cbe98a4f2fb92ff5b25a6d/api/products?pageNo=${this.pageNo}`)
        .then(res => res.data)
    }
  }}

Vue的計算屬性API怎么寫

vue-async-computed

巧用computed屬性計算props

下面的例子實現props的雙向綁定

export default {
  name: 'Pagination',
  props: {
   page: {
      type: Number,
      default: 1
    },
    limit: {
      type: Number,
      default: 10
    }
  },
 computed: {
  currentPage: {
    get() {
      return this.page    },
    set(val) {
      this.$emit('update:page', val)
    }
  },
  pageSize: {
    get() {
      return this.limit    },
    set(val) {
      this.$emit('update:limit', val)
    }
  }
 }

感謝各位的閱讀,以上就是“Vue的計算屬性API怎么寫”的內容了,經過本文的學習后,相信大家對Vue的計算屬性API怎么寫這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌邑市| 永德县| 鹤壁市| 正宁县| 平塘县| 湖南省| 团风县| 临海市| 河西区| 益阳市| 岳普湖县| 揭东县| 汽车| 蕲春县| 上思县| 东乡族自治县| 屯留县| 利津县| 甘谷县| 房山区| 蚌埠市| 五常市| 宁波市| 庆元县| 高尔夫| 嫩江县| 沁水县| 岑巩县| 白玉县| 常山县| 伊宁县| 长顺县| 齐齐哈尔市| 彰武县| 望谟县| 尉氏县| 孟村| 商城县| 和龙市| 禄丰县| 乐清市|