• VUE课程参考---17、计算属性


    VUE课程参考---17、计算属性

    一、总结

    一句话总结:

    vue的计算属性可以用来根据vue中data中的值的变化,自动变化计算的值,比如fullname变化的时候自动更新firstname和lastname,计算属性可以用来简化模板中的的复杂的js表达式
    computed:{
    fullName:function () {
        console.log('fullName');
        return this.firstName+'-'+this.lastName;
    },
    //这里是对象
    fullName3:{
        // 当获取当前属性值时自动调用, 将返回值(根据相关的其它属性数据)作为属性值
        get:function() {
            console.log('fullName3-get');
            return this.firstName+'-'+this.lastName;
        },
        // 当属性值发生了改变时自动调用, 监视当前属性值变化, 同步更新相关的其它属性值
        set:function(value) {
            console.log('fullName3-set');
            const names = value.split('-');
            this.firstName = names[0];
            this.lastName = names[1];
        }
    },

    1、vue的计算属性的写法形式?

    1、只写get:computed里面放一个函数:例如fullName:function (){}
    2、get和set一起写:computed里面放一个对象:例如fullName3:{get:function(){},set:function(value){}}
    computed:{
    fullName:function () {
        console.log('fullName');
        return this.firstName+'-'+this.lastName;
    },
    //这里是对象
    fullName3:{
        // 当获取当前属性值时自动调用, 将返回值(根据相关的其它属性数据)作为属性值
        get:function() {
            console.log('fullName3-get');
            return this.firstName+'-'+this.lastName;
        },
        // 当属性值发生了改变时自动调用, 监视当前属性值变化, 同步更新相关的其它属性值
        set:function(value) {
            console.log('fullName3-set');
            const names = value.split('-');
            this.firstName = names[0];
            this.lastName = names[1];
        }
    },

    2、方法和计算属性的区别?

    VUE中的方法和计算属性可以实现同样的功能,区别就是计算属性有基于响应式依赖的缓存(也就是计算属性依赖的数据改变缓存才会改变),而方法没有,需要缓存的话就用计算属性。
    <div id="app">
        <p>Original message: "{{ message }}"</p>
        <hr>
        <p>计算属性1: "{{ reversedMessage }}"</p>
        <p>计算属性2: "{{ reversedMessage }}"</p>
        <p>计算属性3: "{{ reversedMessage }}"</p>
        <hr>
        <p>方法1: "{{ reversedMessage2() }}"</p>
        <p>方法2: "{{ reversedMessage2() }}"</p>
        <p>方法3: "{{ reversedMessage2() }}"</p>
    </div>
    <script src="../js/vue.js"></script>
    <script>
        let vm = new Vue({
            el: '#app',
            data: {
                message: '我有一只小毛驴,我永远也不骑'
            },
            computed: {
                // 计算属性的 getter
                reversedMessage: function () {
                    // `this` 指向 vm 实例
                    console.log('计算属性:reversedMessage');
                    for (let i=1;i<=100000;i++){
    
                    }
                    return this.message.split('').reverse().join('')+''+Date.now();
                }
            },
            methods: {
                //用方法实现同样功能
                reversedMessage2: function () {
                    console.log('方法:reversedMessage2');
                    for (let i=1;i<=100000;i++){
    
                    }
                    return this.message.split('').reverse().join('')+''+Date.now();
                }
            }
        });
    </script>

    3、vue中计算属性为什么要有缓存?

    假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A。如果没有缓存,我们将不可避免的多次执行 A 的 getter!

    二、计算属性

    博客对应课程的视频位置:

    1、计算属性

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>计算属性</title>
     6 </head>
     7 <body>
     8 <!--
     9 
    10 vue的计算属性可以用来根据vue中data中的值的变化,自动变化计算的值,比如fullname变化的时候自动更新firstname和lastname,计算属性可以用来简化模板中的的复杂的js表达式
    11 
    12 vue的计算属性的写法形式
    13 1、只写get:computed里面放一个函数:例如fullName:function (){}
    14 2、get和set一起写:computed里面放一个对象:例如fullName3:{get:function(){},set:function(value){}}
    15 
    16 
    17 
    18 -->
    19 <div id="app">
    20     <label>
    21         FirstName:<input type="text" v-model="firstName"><br>
    22     </label>
    23     <label>
    24         LastName:<input type="text" v-model="lastName"><br>
    25     </label>
    26     <label>
    27         FullName(计算属性(单向)):<input type="text" v-model="fullName"><br>
    28     </label>
    29     <label>
    30         FullName2(使用方法):<input type="text" :value="calcFullName()"><br>
    31     </label>
    32     <label>
    33         FullName3(计算属性(双向)):<input type="text" v-model="fullName3"><br>
    34     </label>
    35 </div>
    36 <script src="../js/vue.js"></script>
    37 <script>
    38     let vm = new Vue({
    39         el: '#app',
    40         data: {
    41             firstName:'',
    42             lastName:'',
    43         },
    44         methods:{
    45             calcFullName:function () {
    46                 console.log('calcFullName');
    47                 return this.firstName+'-'+this.lastName;
    48             }
    49         },
    50         computed:{
    51             fullName:function () {
    52                 console.log('fullName');
    53                 return this.firstName+'-'+this.lastName;
    54             },
    55             //这里是对象
    56             fullName3:{
    57                 // 当获取当前属性值时自动调用, 将返回值(根据相关的其它属性数据)作为属性值
    58                 get:function() {
    59                     console.log('fullName3-get');
    60                     return this.firstName+'-'+this.lastName;
    61                 },
    62                 // 当属性值发生了改变时自动调用, 监视当前属性值变化, 同步更新相关的其它属性值
    63                 set:function(value) {
    64                     console.log('fullName3-set');
    65                     const names = value.split('-');
    66                     this.firstName = names[0];
    67                     this.lastName = names[1];
    68                 }
    69             }
    70         }
    71     });
    72 </script>
    73 </body>
    74 </html>

    2、计算属性和方法的区别

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>计算属性和方法的区别</title>
     6 </head>
     7 <body>
     8 <!--
     9 1、
    10 计算属性和方法的区别
    11 VUE中的方法和计算属性可以实现同样的功能,
    12 区别就是计算属性有基于响应式依赖的缓存,而方法没有,
    13 需要缓存的话就用计算属性。
    14 
    15 2、
    16 vue中计算属性为什么要有缓存
    17 假设我们有一个性能开销比较大的计算属性 A,它需要遍历一个巨大的数组并做大量的计算。然后我们可能有其他的计算属性依赖于 A。如果没有缓存,我们将不可避免的多次执行 A 的 getter!
    18 
    19 
    20 -->
    21 <div id="app">
    22     <p>Original message: "{{ message }}"</p>
    23     <hr>
    24     <p>计算属性1: "{{ reversedMessage }}"</p>
    25     <p>计算属性2: "{{ reversedMessage }}"</p>
    26     <p>计算属性3: "{{ reversedMessage }}"</p>
    27     <hr>
    28     <p>方法1: "{{ reversedMessage2() }}"</p>
    29     <p>方法2: "{{ reversedMessage2() }}"</p>
    30     <p>方法3: "{{ reversedMessage2() }}"</p>
    31 </div>
    32 <script src="../js/vue.js"></script>
    33 <script>
    34     let vm = new Vue({
    35         el: '#app',
    36         data: {
    37             message: '我有一只小毛驴,我永远也不骑'
    38         },
    39         computed: {
    40             // 计算属性的 getter
    41             reversedMessage: function () {
    42                 // `this` 指向 vm 实例
    43                 console.log('计算属性:reversedMessage');
    44                 for (let i=1;i<=100000;i++){
    45 
    46                 }
    47                 return this.message.split('').reverse().join('')+''+Date.now();
    48             }
    49         },
    50         methods: {
    51             //用方法实现同样功能
    52             reversedMessage2: function () {
    53                 console.log('方法:reversedMessage2');
    54                 for (let i=1;i<=100000;i++){
    55 
    56                 }
    57                 return this.message.split('').reverse().join('')+''+Date.now();
    58             }
    59         }
    60     });
    61 </script>
    62 </body>
    63 </html>

     
  • 相关阅读:
    hdu 1269 迷宫城堡 (并查集)
    hdu 1272 小希的迷宫 (深搜)
    hdu 1026 Ignatius and the Princess I (深搜)
    hdu 1099 Lottery
    hdu 1068 Girls and Boys (二分匹配)
    几个基础数位DP(hdu 2089,hdu 3555,uestc 1307 windy 数)
    hdu 1072 Nightmare (广搜)
    hdu 1398 Square Coins (母函数)
    hdu 1253 胜利大逃亡 (深搜)
    hdu 1115 Lifting the Stone (求重心)
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12735701.html
Copyright © 2020-2023  润新知