iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Vue.js

重新瞭解vue3.js + vite框架系列 第 21

Day21-Computed 運算之 Getter, Setter

  • 分享至 

  • xImage
  •  

從data取得資料後重新運算產生結果,並渲染至畫面=>getter

資料重新整理後再寫入資料集裡=>setter
如:methods方法觸發computed重新整理後再寫入資料集裡

21-0 js

const App = {
  data() {
    return {
      num: 10,
      search: '',
      products: [
        {
          name: '蛋餅',
          price: 30,
          vegan: false
        },
        {
          name: '飯糰',
          price: 35,
          vegan: false
        }
      ],
      carts: [],
      sum: 0,
    }
  },
  computed:{
    // total(){
    //   let total = 0;
    //   this.carts.forEach(item => {
    //     total += item.price;
    //   });
    //   return total
    // },
    //原寫total()屬於getter寫法,要改成setter需total:{}
    total:{
      get(){
        let total = 0;
        this.carts.forEach(item => {
          total += item.price;
        });
        return this.sum || total
      },
      set(val){
        console.log(val);
        this.sum = val;
      }
    },
    filterProducts(){
      return this.products.filter(item=>{
        console.log(item)
        return item.name.match(this.search);
      })
    }
  },
  methods: {
    addToCart(product) {
      this.carts.push(product)
    },
  },
  created() {
    console.log(this);
  }
};
Vue.createApp(App).mount('#app');

21-1

  <ul>
    <li v-for="product in products">
      {{ product.name }} / {{ product.price }}元
      <button type="button" @click="addToCart(product)">加入購物車</button>
    </li>
  </ul>
  ...
  <h6>購物車項目</h6>
  <ul>
    <li v-for="item in carts">{{ item.name }}</li>
  </ul>
  <!-- 使用 computed方法的total() -->
  total 的值:{{ total }}<br><br>

  sum 的值:
  <input type="number" v-model.number="num">
  <button type="button" @click="total = num">更新</button>
  total 的值:{{ total }}<br>
  sum 的值:{{ sum }}

https://ithelp.ithome.com.tw/upload/images/20231006/20121669aa0GLrElAm.png

.
知識點來源:六角課程

以上是今天所提供知識點如有誤,再請務必在下面留言~


上一篇
Day20-Computed 運算基礎運用
下一篇
Day22-watch監聽(1)
系列文
重新瞭解vue3.js + vite框架30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言