iT邦幫忙

2022 iThome 鐵人賽

DAY 26
0
自我挑戰組

laravel+vue 學習系列 第 26

Day26. 前台 API 與頁面之五 ( 切割頁面區塊 )

  • 分享至 

  • xImage
  •  

一、新增 Vue Component 的目錄

  1. resources/components/index 內新增首頁個區塊 components
    https://ithelp.ithome.com.tw/upload/images/20221001/20128127a5XLevUTv8.png

  2. 設定 vuex 配置

    • 新增 mapGetters, 為 vuex 提供的計算屬性方法, 可以從 vuex 模塊內的 getter 內取得 function 建立計算屬性
    <script>
        import {mapState, mapGetters} from 'vuex'
        export default {
            computed:{
                ...mapState('newArrival', ['new_arrivals']),
                ...mapGetters('newArrival', ['getSlice'])
            },
            mounted(){
                console.log('new arrivals component mounted')
                this.$store.dispatch('newArrival/getNewArrival', '5')
            }
        }
    </script>

二、設定 Vuex 配置

  1. resources/js/store 下建立模塊, 用來取不同資料內容
    https://ithelp.ithome.com.tw/upload/images/20221001/20128127fz8cRwZUnZ.png

  2. e.g 設定首頁最新商品區塊

    • 打 API /api/front/category/{category_id} 取回商品資料
    • 使用 vuex 流程建立 state new_arrivals 屬性儲存商品資料, 提供給 Vue 共同時用
    • 取得資料時需要需在屬性前面加上名空間 e.g. newArrival/getNewArrival
    <script>
        import {mapState, mapGetters} from 'vuex'
        export default {
            computed:{
                // 建立 state 計算屬性
                ...mapState('newArrival', ['new_arrivals']),
                // 建立 getter 計算屬性
                ...mapGetters('newArrival', ['getSlice'])
            },
            mounted(){
                console.log('new arrivals component mounted')
                this.$store.dispatch('newArrival/getNewArrival', '5')
            }
        }
    </script>
  1. mapMutations 與 mapActions
  • 當使用 Vue Component 時, 會使用 methods 設定方法, 來觸發 Vuex 的 actions, 此時可以使用 mapActions 來設定 methods 方法, 與 mapState、mapGetters 類似
    import {mapState, mapGetters, mapActions, mapMutations} from 'vuex'
    export default {
        // ... 其他省略
        methods: {
            // 第一種寫法, 指定 function 的名稱
            ...mapActions({getProducts:'getNewArrival'})
            // 直接使用原始方法名稱
            ...mapActions(['getNewArrival'])
        }
    }
  • 當不需要經過 Vuex actions 的流程, 可以直接提交資料到 mutations 直接修改 state 內容, 此時可以設定 mapMutations
    import {mapState, mapGetters, mapActions, mapMutations} from 'vuex'
    export default {
        // ... 其他省略
        methods: {
            // 第一種寫法, 指定 function 的名稱
            ...mapMutations({getARRIVAL:'GETNEWARRIVAL'})
            // 直接使用原始方法名稱
            ...mapMutations(['GETNEWARRIVAL'])
        }
    }
  • 設定完成後可再 Vue 內直接呼叫調用
    // 參數為要修改的值
    getProducts(5)

上一篇
Day25. 前台 API 與頁面之四 (Vuex 與 Vue 路由)
下一篇
Day27. API 身分驗證 ( OAuth )
系列文
laravel+vue 學習32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言