• 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>

     
  • 相关阅读:
    Nginx查看错误日志
    Centos 安装PHP5.5
    Mysql 数据库 远程连接
    使用scrapy框架做武林中文网的爬虫
    pycharm 使用black
    django使用pyecharts(6)----django加入echarts_增量更新_定长_坐标轴定长
    django使用pyecharts(5)----django加入echarts_增量更新_定长
    django使用pyecharts(4)----django加入echarts_增量更新
    django使用pyecharts(3)----django加入echarts_定时全量更新
    django使用pyecharts(2)----django加入echarts_前后台分离
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/12735701.html
Copyright © 2020-2023  润新知