Vue:計算屬性(使用、set和get方法、快取)
阿新 • • 發佈:2020-12-13
1、計算屬性的使用
(1)計算屬性的基本運用
<body> <div id="app"> {{message1}}{{message2}}<br> {{message1 + ' '+message2}}<br> {{getAll()}}<br> {{all}} </div> <script src="../js/vue.js"></script> <script> <!--let定義的變數可以修改值/const定義的不可修改相當於常量--> constapp=new Vue({ el:"#app",//用於掛載要管理的元素 data:{//定義資料 message1:"hello Vue", message2:"zhai" }, methods :{ getAll(){ return this.message1+this.message2 } }, computed:{ all:function(){return this.message1+this.message2 } } }) </script> </body>
要想實現字串的拼接,可以去除兩個屬性的值後進行拼接,也可以封裝為函式,最後一種是通過計算屬性的方式實現的
(2)案例(計算商品的總價格)
- 不使用計算屬性,只能一個個取值然後相加
<div id="app"> <h2>{{foods[0].price+foods[1].price+foods[2].price+foods[3].price}}</h2> </div> <script src="../js/vue.js"></script> <script> <!--let定義的變數可以修改值/const定義的不可修改相當於常量--> const app=new Vue({ el:"#app", data:{ foods:[ {id:1,price:33}, {id:2,price:3}, {id:3,price:23}, {id:4,price:43} ] } }) </script>
2、計算屬性的set和get方法
(1)set和get方法
<body> <div id="app"> {{all}} </div> <script src="../js/vue.js"></script> <script> <!--let定義的變數可以修改值/const定義的不可修改相當於常量--> const app=new Vue({ el:"#app",//用於掛載要管理的元素 data:{//定義資料 message1:"hello Vue", message2:"zhai" }, computed:{ all:{ set:function(){ console.log("hello") }, get:function(){ return this.message1+this.message2 } } } }) </script> </body>
計算屬性的set方法一半時不寫的,get:也可以省略,預設執行的是get方法
3、計算屬性的快取
(1)計算屬性與函式的對比
- 函式
<div id="app"> {{getAll()}}<br> {{getAll()}}<br> {{getAll()}}<br> {{getAll()}}<br> </div> <script src="../js/vue.js"></script> <script> <!--let定義的變數可以修改值/const定義的不可修改相當於常量--> const app=new Vue({ el:"#app",//用於掛載要管理的元素 data:{//定義資料 message1:"hello Vue", message2:"zhai" }, methods :{ getAll(){ console.log("a") return this.message1+this.message2 } } }) </script> </body>
- 計算屬性
<body> <div id="app"> {{all}}<br> {{all}}<br> {{all}}<br> {{all}}<br> </div> <script src="../js/vue.js"></script> <script> <!--let定義的變數可以修改值/const定義的不可修改相當於常量--> const app=new Vue({ el:"#app",//用於掛載要管理的元素 data:{//定義資料 message1:"hello Vue", message2:"zhai" }, computed:{ all:function(){ console.log("-----") return this.message1+this.message2 } } }) </script> </body>
對於計算屬性的方式,在內容沒有變化的時候就會直接返回結果,而不是重新執行一次。
上面重新設定message1的值之後,會重新執行一次計算屬性。