首页 > 作文

Vue中的computed属性详解

更新时间:2023-04-04 11:29:07 阅读: 评论:0

今天来说说vue中的计算属性computed,为了更好的理解计算属性的好处,我们先通过一个案例来慢慢 了解计算属性,有如下案例:定义两个输入框以及一个span标签,span标签中的内容为两个输入框中的值,span标签中的内容随着输入框中的内容变化而变化

插值表达式

我们先用插值表达式的方法来实现这一效果

<body>    <div id="app">        姓: <input type="text" v-model=firstname> </br>        </br>        名: <input type="text" v-model=lastname></br>        </br>        姓名: <span>{{firstname}}{{lastname}}</span>​    </div></body><script type="text/javascript">    new vue({        el: "#app",        data: {            firstname: '张',            lastname: '三'        },        methods: {        }    })​</script>

我们可以发现能简单实现我们所需要的效果,但是如果现在我想要添加另外的要求,当我输入的是英文的时候就将首字母大写,这个时候我们只能使用以下方法

<body>    <div id="app">        firstname: <input type="text" v-model=firstname> </br>        </br>        lastname: <input type="text" v-model=lastname></br>        </br>        fullname: <span>{{firstname.replace(firstname[0],firstname[0].toupperca())}}   {{lastname.replace(lastname[0],lastname[0].toupperca())}}</span>​    </div></body><script type="text/javascript">    var str = ''​    new vue({        el: "#app",        data: {            firstname: 'joe',            lastname: 'lili'        },        methods: {        }    })</script>

从插值表达式所展现的情况来看虽然能实现想一度电等于多少千瓦要的效果但是代码显得特别冗长不利于阅读,这个时候想到可以向methods中添加方法来实现这一效果。

methods

向methods添加fullname方法

<body>    <div id="app">        firstname: <input type="text" v-model=firstname> </br>        </br>        lastname: <input type="text" v-model=lastname></br>        </br>        fullname: <span>{{fullname()}}</span>​    </div></body><script type="text/javascript">    var str = ''​    new vue({        el: "#app",        data: {            firstname: 'joe',            lastname: 'lili'        },        methods: {            fullname()学生创业 {                let a 仍是少年= '';                let b = '';                if (this.firstname.length != 0)                    a = this.firstname.repl中华少年说ace(this.firstname[0], this.firstname[0].toupperca())                if (this.lastname.length != 0)                    b = this.lastname.replace(this.lastname[0], this.lastname[0].toupperca())                return a + ' ' + b            }        }    })​</script>

我们可以看到通过方法就能很好的解决代码过于冗长的问题。但是又面临了另一个问题,我们在学习vue中的data属性时了解到,只要data中的数据发生变化,页面中用到data数据的地方就会进行更新,所以当data数据firstname与lastname一改变就会重新调用方法fullname,在一定情况下会导致代码效率低,另外,methods中的方法在插值表达式中使用了多少次就会运行多少次。根据以上两种方法的弊端出现了另一种方法,就是使用computed属性。

computed

在computed中可以定义一些属性:计算属性。计算属性的本质其实就是一个方法,只不过在使用的时候可以直接当做属性来使用。具体有以下特点

计算属性在使用时不需要加(),直接写名称即可如果计算属性用到了data中的数据,当data数据发生变化时,就会立即重新计算这个计算属性的值计算属性在第一次使用时的结果会被缓存起来,直到属性中所依赖的data数据发生改变计算属性的结果才会重新求值
<body>    <div id="app">        firstname: <input type="text" v-model=firstname> </br>        </br>        lastname: <input type="text" v-model=lastname></br>        </br>        fullname: <span>{{fullname}}</span></br>        </br>        fullname: <span>{{fullname}}</span></br>        </br>        fullname: <span>{{fullname}}</span>​    </div></body><script type="text/javascript">    var str = ''​    new vue({        el: "#app",        data: {            firstname: 'joe',            lastname: 'lili'        },        computed: {            //get的作用?当读取fullname时,get就会被调用,且返回值就是fullname的值            //get什么时候被调用?1.当第一次读取fullname时。2.当所依赖的data数据发生变化时            fullname: {                get() {                    console.log('hi,我调用了computed')                  let a = '';                let b = '';                if (this.firstname.length != 0)                    a = this.firstname.replace(this.firstname[0], this.firstname[0].toupperca())                if (this.lastname.length != 0)                    b = this.lastname.replace(this.lastname[0], this.lastname[0].toupperca())                return a + ' ' + b                }            }        }    })</script></html>

在前面我们说过methods中的方法在页面中使用n次便会调用n次,而computed中的属性却不会出现上面的情况。上面代码中我们在页面中使用了同一计算属性3次却只输出了1次结果,同样使用methods中的full方法却输出了3次结果,意味着方法调用了3次。为什么会有这样的结果?这都是因为computed中有缓存机制而methods中并没有。在代码解析到第一个fullname时就会对fullname的结果进行缓存,而到第二个、第三个时会发现缓存中已经有了,那么就不会在对其进行调用。

对computed的使用有了大致的了解后, 我们再来对computed补充一下。

在computed我们可以通过给计算属性添加t方法达到赋值效果

<body>    <div id="app">        firstname: <input type="text" v-model=firstname> </br>        </br>        lastname: <input type="text" v-model=lastname></br>        </br>        fullname: <span>{{fullname}}</span></br>        </br>    </div></body><script type="text/javascript">    var str = ''​    var app = new vue({        el: "#app",        data: {            firstname: 'joe',            lastname: 'lili'        },        computed: {            //get的作用?当读取fullname时,秋天作文600字get就会被调用,且返回值就是fullname的值            //get什么时候被调用?1.当第一次读取fullname时。2.当所依赖的data数据发生变化时            fullname: {                get() {                    console.log(this)                    return this.firstname + this.lastname                },                t(val) {                    this.firstname = val[0]                    this.lastname = val[1]                }            }        }    })​</script>

我们可以看到当在控制台对fullname赋值时firstname以及lastname都会改变

如果计算属性中只有get没有t的话可以直接像下面代码这样写

computed: {            fullname(){                console.log(this)                return this.firstname + this.lastname                }            }

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!

本文发布于:2023-04-04 11:29:06,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/2a3e7b13d4ccab6c3019e9c816902077.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Vue中的computed属性详解.doc

本文 PDF 下载地址:Vue中的computed属性详解.pdf

标签:属性   方法   就会   数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图