###### tags: `vue`, `front-end`, `javascript` # 【自學筆記】從0開始學Vue - Day8 關於 Vue 計算屬性Computed 關於Vue,一直以來都多少有接觸,但都沒有好好的理解過它 就來做個一系列的學習筆記,紀錄學習Vue的過程吧 基本上就以到處拜讀前輩大神的文章,並整理成我理解的文字的方式進行 --- 在之前介紹`Mustache`語法的時候提到,可以在`Mustache`中使用表達式 例如顯示一個反轉的字串 ```htmlembedded= <div id="app"> <p>原始訊息:${ message }</p> <p>反轉訊息:${ message.split('').reverse().join('') }</p> </div> ``` 雖然可以,但如果專案中有大量這樣的東西,會讓程式碼很醜很難維護 這時候就可以用到今天要介紹的`Computed`計算屬性 ### Computed介紹與使用 * 主要用來處理複雜邏輯運算。如:資料計算 改寫上方例子為 ```htmlembedded= <div id="app"> <p>原始訊息:{{ message }}</p> <p>反轉訊息:{{ reversedMessage }}</p> </div> ``` ```javascript= var vm = new Vue({ el: '#app', data: { message: 'Hello World!', }, computed: { reversedMessage: function() { return this.message.split('').reverse().join(''); }, }, }); ``` ### Computed屬性:getter(讀取)、setter(寫入) 如果需要對`Computed`運算出來的結果,再進行更動的話,需要設置`getter` & `setter`,下面先範例只有`getter`(預設)的情況 ```htmlembedded= <div id="app"> <div>firstName: <input v-model="firstName" type="text"></div> <div>lastName: <input v-model="lastName" type="text"></div> <div>fullName: <input type="text" v-model="fullName"></div> </div> ``` ```javascript= var vm = new Vue({ el: '#app', data: { firstName: 'Niodo', lastName: 'Shaba' }, computed:{ fullName(){ return this.firstName +' '+ this.lastName; } }, }); ``` 測試後會發現更改`firstName`跟`lastName`時,`fullName`會跟著變動 但更改`fullName`時,`firstName`及`lastName`並不會一起更動 原因是因為`computed`僅有一個預設的`getter`,在沒有設定`setter`的時候無法對計算出來的屬性直接綁定,所以要加入`setter`屬性 ```htmlembedded= <div id="app"> <div>firstName: <input v-model="firstName" type="text"></div> <div>lastName: <input v-model="lastName" type="text"></div> <div>fullName: <input type="text" v-model="fullName"></div> </div> ``` ```javascript= var vm = new Vue({ el: '#app', data: { firstName: 'Niodo', lastName: 'Shaba' }, computed:{ fullName:{ //getter get(){ return this.firstName +' '+ this.lastName; }, //setter set(val){ var name = val.split(' '); this.firstName=name[0]; this.lastName=name[1]; } } } }); ``` --- *參考資料: https://reurl.cc/1ZaLD8* *新手工程師的筆記,純粹記錄學了些啥東西 如果有前輩高人讀了我的文,文中有任何錯誤再麻煩指教指教*