computed get set
by imall
HTML
<script src="https://unpkg.com/[email protected]/dist/vue.global.js"></script>
<div id="app">
<h1> {{ author.name }}出的書</h1>
<ul>
<li v-for="book in author.books">{{book}}</li>
</ul>
<div> 是否還有庫存: {{ hasBook }} </div>
<button @click="changeBookCount"> 將書本數量歸零</button>
</div>
JavaScript
const { createApp, ref, computed } = Vue;
createApp({
setup() {
const author = ref({
name: 'John Doe',
books: [
'book1:JavaScript',
'book2:Vue',
]
})
// 這個方法用來「寫入」計算屬性
const changeBookCount = () => {
hasBook.value = 0;
}
// 改寫 只能「讀取」的計算屬性,讓這個「變數」能讀取
const hasBook = computed({
get:()=>author.value.books.length > 0 ? true : false,
set:(value)=>{
author.value.books.length = value
}
})
// 一樣記得,模板有用到的變數都要回傳出去
return { author, hasBook,changeBookCount }
},
}).mount("#app");