vue中的计算属性computed

计算属性conputed

  • 概念:基于现有的数据,计算出来的新属性。依赖的数据变化,自动重新计算。

  • 语法:

    1. 声明在computed配置项中,一个计算属性对应一个函数
    2. 使用起来和普通属性一样使用 {{计算属性名}}

简写方式:

vue中的计算属性computed_第1张图片

DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Documenttitle>
    <style>
        table {
            border: 1px solid #000;
            text-align: center;
            width: 240px;
        }

        th,
        td {
            border: 1px solid #000;
        }

        h3 {
            position: relative;
        }
    style>
head>

<body>

    <div id="app">
        <h3>礼物清单h3>
        <table>
            <tr>
                <th>名字th>
                <th>数量th>
            tr>
            <tr v-for="(item, index) in list" :key="item.id">
                <td>{{ item.name }}td>
                <td>{{ item.num }}个td>
            tr>
        table>

        
        <p>礼物总数:{{totalCount}} 个p>
    div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                // 现有的数据
                list: [
                    { id: 1, name: '篮球', num: 1 },
                    { id: 2, name: '玩具', num: 2 },
                    { id: 3, name: '铅笔', num: 5 },
                ],

            },
            computed: {
                totalCount() {
                    let total = this.list.reduce((sum, item) => sum + item.num, 0);
                    //reduce求和方法
                    return total;
                }
            }

        })
    script>
body>

html>

vue中的计算属性computed_第2张图片

计算属性的完整写法

  • 计算属性默认的简写,只能读取访问,不能”修改“。

  • 如果要"修改"→需要写计算属性的完整写法。

    语法:

vue中的计算属性computed_第3张图片

例子demo:

DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Documenttitle>
  <style>
    input {
      width: 30px;
    }
  style>
head>
<body>

  <div id="app">
    姓:<input type="text" v-model="firstName"> +
    名:<input type="text" v-model="lastName"> =
    <span>{{ fullName }}span><br><br>
    
    <button @click="changeName">改名卡button>
  div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js">script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        firstName: '刘',
        lastName: '备',
      },
      methods: {
        changeName () {
          this.fullName = '黄忠'
        }
      },
      computed: {
        // 简写 → 获取,没有配置设置的逻辑
        // fullName () {
        //   return this.firstName + this.lastName
        // }

        // 完整写法 → 获取 + 设置
        fullName: {
          // (1) 当fullName计算属性,被获取求值时,执行get(有缓存,优先读缓存)
          //     会将返回值作为,求值的结果
          get () {
            return this.firstName + this.lastName
          },
          // (2) 当fullName计算属性,被修改赋值时,执行set
          //     修改的值,传递给set方法的形参
          set (value) {      
            this.firstName = value.slice(0, 1)
            this.lastName = value.slice(1)
          }
        }
      }
    })
  script>
body>
html>

你可能感兴趣的:(前端,vue.js,javascript,前端)