概念:基于现有的数据,计算出来的新属性。依赖的数据变化,自动重新计算。
语法:
1)声明在computed配置项中,一个计算属性对应一个函数。
2)使用起来和普通属性一样使用{{计算属性名}}
- computed:{
- 计算属性名(){
- 一段代码逻辑(计算逻辑)
- return 结果
- }
- }

- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="Author" content=""/>
- <meta name="Keywords" content=""/>
- <meta name="Description" content=""/>
- <style>
- table tr td{
- border:2px solid #000;
- width:50px;
- text-align:center;
- }
- </style>
- </head>
- <body>
- <div id="app">
- <h3>礼物清单</h3>
- <table style="border:2px solid #000;">
- <tr>
- <td>名字</td>
- <td>数量</td>
- </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>
- </body>
- <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/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)
- return total
- }
- }
- })
- </script>
- </html>
computed计算属性:
作用:封装了一段对于数据的处理,求得一个结果。
语法:
1)写在computed配置项中
2)作为属性,直接使用->this.计算属性{{计算属性}}
优点:缓存特性(提升性能):计算属性会对计算出来的结果缓存,再次使用直接读取缓存,依赖项变化了,会自动重新计算->并再次缓存
methods方法:
作用:给实例提供一个方法,调用以处理业务逻辑。
语法:
1)写在methods配置项中
2)作为方法,需要调用->@click="方法名"
计算属性默认的简写,只能读取访问,不能“修改”。如果要“修改”,需要写计算属性完整的写法。
- computed:{
- 计算属性名:{
- get(){
- 一段代码逻辑(计算逻辑)
- return 结果
- },
- set(value){
- 一段代码逻辑(修改逻辑)
- },
- }
- }
- <!doctype html>
- <html>
- <head>
- <meta charset="utf-8">
- <meta name="Author" content=""/>
- <meta name="Keywords" content=""/>
- <meta name="Description" content=""/>
- <style>
- table tr td{
- border:2px solid #000;
- width:50px;
- text-align:center;
- }
- </style>
- </head>
- <body>
- <div id="app">
- 姓<input type="text" v-model="firstName">+名<input type="text" v-model="lastName"><span>{{fullName}}</span>
- <br>
- <button @click="changeName">改名卡</button>
- </div>
- </body>
- <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
- <script>
- const app=new Vue({
- el:'#app',
- data:{
- firstName:'刘',
- lastName:'备'
- },
- methods:{
- changeName(){
- this.fullName='吕小布'
- }
- },
- computed:{
- fullName:{
- get(){
- return this.firstName+this.lastName
- },
- set(value){
- this.firstName=value.slice(0,1)
- this.lastName=value.slice(1)
- }
- }
- }
- })
- </script>
- </html>