Vue(三)

58 阅读1分钟

Vue3计算属性

computed函数

与vue2中的computed配置功能一致

import {computed} from 'vue'

setup(){
 简写:
 
 let fullName = computed(()=>{
  return person.firstName + '-' person.lastName
 })
 
 完整:
 
 let fullName = computed({
   get(){
    return  person.firstName + '-' person.lastName
   },
   set(v){
   const nameArr = v.split('-')
   person.firstName =nameArr[0]
   person.lastName =nameArr[1]
   
   }
 })
}

一个利用计算属性写的小Demo(全选和不全选)

<template>

  <input type="checkbox" v-model="isChecked" /> 全选/全不选
  <ul>
    <li v-for="(item, index) in list" :key="index">
      <input type="checkbox" v-model="checkAllList" :value="item.value" />{{
        item.value
      }}
    </li>
  </ul>
</template>

<script>
import { ref, computed, reactive, toRefs } from "vue";
export default {
  name: "",
  setup() {
   

    // 计算属性练习
    let checkAll = ref(false);
    let checkAllList = reactive({
      checkAllList: [],
    });
    let data = reactive({
      list: [
        { value: "html", label: "true" },
        { value: "css", label: "true" },
        { value: "js", label: "true" },
        { value: "vue", label: "true" },
      ],
    });
    // let isChecked = computed(
    //   () => checkAllList.checkAllList.length === data.list.length //单独写不需要return
    // );
    let isChecked = computed({
      get() {
        return checkAllList.checkAllList.length === data.list.length;
      },
      set(v) {
        v
          ? (checkAllList.checkAllList = data.list.map((item) => item.value))
          : (checkAllList.checkAllList = []);
      },
    });
    return {

      checkAll,
      ...toRefs(checkAllList),
      ...toRefs(data),
      isChecked,
    };
  },
};
</script>

<style></style>