电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

詳解Vue之計算屬性

瀏覽:30日期:2023-01-12 08:32:37

模板內的表達式通常用于簡單的運算,當其過長或邏輯復復雜時,會變得難以維護

什么是計算屬性

在Vue應用中,在模板中雙向綁定一些數據或者表達式,但是表達式如果過長,或者邏輯更為復雜時,就會變得臃腫甚至難以維護和閱讀,比如

<div>{{text.split(’,’).reverse().join(’,’)}}</div>.

這里表達式包含三個操作,并不是很清晰,所以在遇到復雜的邏輯時應該使用計算屬性,上例可以用計算屬性進行改寫:

<div id='CalculationProperties'> {{ReversedText}} </div><script> var CalculationProperties = new Vue({ el: '#CalculationProperties', data: {text:'123,456', }, computed: {ReversedText: function (){ //所有計算屬性都以函數的形式寫在Vue實例內的computed選項內,最終返回計算后的結果 return this.text.split(’,’).reverse().join(’,’)} } })</script>

所有計算屬性都以函數的形式寫在Vue實例內的computed選項內,最終返回計算后的結果

計算屬性用法

在一個計算屬性里可以完成各種復雜的邏輯,包括邏輯運算、函數調用等,只要最終返回一個結果就可以。除了上面的簡單的用法,計算屬性還可以依賴多個vue實例的數據,只要其中人一個數據變化,計算屬性就會重新執行,視圖也會更新,例如下面的例子展示的是購物車內兩個包裹的物品總價

<div id='prices'> 總價: {{prices}} </div> <script> // <!--購物車總價--> var prices = new Vue({ el: '#prices', data: {package1: [{ name: '華為mate20pro', price: 4566, count: 2},{ name: '華為p30', price: 4166, count: 2},],package2: [{ name: '蘋果', price: 30, count: 2},{ name: '香蕉', price: 2, count: 20},] }, computed: {prices: function () { var prices = 0; debugger for (var i = 0; i < this.package1.length; i++) { prices += this.package1[i].price * this.package1[i].count; } for (var i = 0; i < this.package2.length; i++) { prices += this.package2[i].price * this.package2[i].count; } return prices;} } }) </script>

當package1或package2中的商品發生變化,比如購買數量變化或者增刪商品時,計算屬性prices就會自動更新,視圖中的總價也會自動變化

每個計算屬性都包含一個getter和setter,上面的例子都是計算屬性默認用法,只是利用了getter來讀取。在你需要時,也可以提供一個setter函數,當手動修改計算屬性的值就像修改一個普通數據那樣,就會觸發setter函數,執行一些自定義的操作。

<!--setter--> <div id='setter'> 姓名: {{fullName}} </div><script> var setter = new Vue({ el: 'setter', data: {firstName: ’Jack’,lastName:’Green’ }, computed: {fullName: { //getter,用于讀取 get: function () { return this.firstName + ’ ’ + this.lastName }, //setter,寫入時觸發 set: function (newValue) { var names = newValue.split(’ ’); this.firstName = names[0]; this.lastName = names[1]; }} } })</script>

當執行 setter.fullName=’Join Doe’時候,setter就會被調用,數據firstName和lastName都會相對更新,視圖同樣也會更新

絕大多情況下,我們只會使用默認的getter方法來讀取一個計算屬性,在業務中很少使用到setter,所以在聲明一個計算屬性的時候,可以直接使用默認的寫法,不必將getter和setter都聲明

計算屬性除啦以上簡單的文本插值外,還經常用于動態的設置元素的樣式名稱class和內聯樣式style,當使用組件時,計算屬性也經常用來動態傳遞props以后,我會慢慢介紹到

計算屬性還有兩個很使用的小技巧很容易被忽略,一是計算屬性可以依賴其他計算屬性,二是計算屬性不僅可以依賴當前Vue實例的數據,還可以依賴其他Vue實例的數據

<div id='app1'></div> <div id='app2'> {{reversedText}} </div><script> var app1 = new Vue({ el: '#app1', data: {text: '123,456' } }); var app2 = new Vue({ el: '#app2', computed: {reversedText: function () { //這里是依賴app1實例中的數據text return app1.text.split(’,’).reverse().join(’,’)} } })</script>

這里我們創建了兩個vue實例app1和app2,在app2的計算屬性reversedText中,依賴的是app1的數據text,所以當text變化時,實例app2的計算屬性也會變化,這樣的用法以后用到的也會比較多,尤其是在多人協同開發時很常用,以為你寫的組件所用到的數據需要依賴他人的組件提供,以后接觸的多了就會慢慢的意識到這一點。

計算屬性緩存

其實細心的話就會發現,調用methods里的方法也能實現和計算屬性一樣的效果,甚至有的方法還能接收參數,使用起來更加的靈活,既然使用methods就可以實現,那為什么還需要計算屬性呢?原因就是計算屬性是基于他的依賴緩存的。一個計算屬性所依賴的數據發生變化時,他才會重新取值,所以依賴的text只要不改變。計算屬性也就不更新

computed:{now:function(){return Date.now()}}

這里的Date.now()不是響應式依賴,所以計算屬性now 不會更新,但是methods則不同,只要重新渲染他就會被調用,因此函數也會被執行。

使用計算屬性還是methods取決于你是否需要緩存,當遍歷大數組和做大量計算時,應當使用計算屬性,除非你不希望得到緩存

以上就是詳解Vue之計算屬性的詳細內容,更多關于vue 計算屬性的資料請關注好吧啦網其它相關文章!

標簽: Vue
相關文章:
主站蜘蛛池模板: 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | 苏州西朗门业-欧盟CE|莱茵UL双认证的快速卷帘门品牌厂家 | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 培训一点通 - 合肥驾校 - 合肥新亚驾校 - 合肥八一驾校 | 电镀标牌_电铸标牌_金属标贴_不锈钢标牌厂家_深圳市宝利丰精密科技有限公司 | 查分易-成绩发送平台官网 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | 深圳侦探联系方式_深圳小三调查取证公司_深圳小三分离机构 | 事迹材料_个人事迹名人励志故事| 手持式浮游菌采样器-全排二级生物安全柜-浙江孚夏医疗科技有限公司 | 篷房|仓储篷房|铝合金篷房|体育篷房|篷房厂家-华烨建筑科技官网 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 上海办公室装修,办公楼装修设计,办公空间设计,企业展厅设计_写艺装饰公司 | 耐压仪-高压耐压仪|徐吉电气| 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 美国PARKER齿轮泵,美国PARKER柱塞泵,美国PARKER叶片泵,美国PARKER电磁阀,美国PARKER比例阀-上海维特锐实业发展有限公司二部 | 广州工业氧气-工业氩气-工业氮气-二氧化碳-广州市番禺区得力气体经营部 | HYDAC过滤器,HYDAC滤芯,现货ATOS油泵,ATOS比例阀-东莞市广联自动化科技有限公司 | 冷柜风机-冰柜电机-罩极电机-外转子风机-EC直流电机厂家-杭州金久电器有限公司 | 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 太阳能发电系统-太阳能逆变器,控制器-河北沐天太阳能科技首页 | 单螺旋速冻机-双螺旋-流态化-隧道式-食品速冻机厂家-广州冰泉制冷 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 江苏密集柜_电动_手动_移动_盛隆柜业江苏档案密集柜厂家 | 行吊_电动单梁起重机_双梁起重机_合肥起重机_厂家_合肥市神雕起重机械有限公司 | 硫化罐-电加热蒸汽硫化罐生产厂家-山东鑫泰鑫智能装备有限公司 | 澳威全屋定制官网|极简衣柜十大品牌|衣柜加盟代理|全屋定制招商 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 铝单板_铝窗花_铝单板厂家_氟碳包柱铝单板批发价格-佛山科阳金属 | 全自动面膜机_面膜折叠机价格_面膜灌装机定制_高速折棉机厂家-深圳市益豪科技有限公司 | 执业药师报名条件,考试时间,考试真题,报名入口—首页 | 宝宝药浴-产后药浴-药浴加盟-艾裕-专注母婴调养泡浴 | 柴油发电机组_柴油发电机_发电机组价格-江苏凯晨电力设备有限公司 | 压砖机、液压制砖机、静压砖机、环保砖机生产厂家—杜甫机械 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | 沥青灌缝机_路面灌缝机_道路灌缝机_沥青灌缝机厂家_济宁萨奥机械有限公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | pH污水传感器电极,溶解氧电极传感器-上海科蓝仪表科技有限公司 |