vue外卖二十:商家详情-评价列表:评价列表接口模拟-vuex获取完整数据链流程、滑动better-scroll

45 篇文章 2 订阅

一、评价列表接口模拟-获取完整数据链流程

1)数据模拟mockjs src/mock/mockServer.js

/*
使用mockjs提供mock数据接口
 */
import Mock from 'mockjs'
import data from './data.json'

// 返回goods的接口
Mock.mock('/shop_goods', {code:0, data: data.goods})
// 【1】返回ratings的ajax请求接口,为0表示成功,data.ratings,在data.json中
Mock.mock('/shop_ratings', {code:0, data: data.ratings})

2)ajax请求构造 api/index.js

/*
包含n个接口请求函数的模块
函数的返回值: promise对象
 */
import ajax from './ajax.js'
const BASE_URL='/api'

// 1、根据经纬度获取位置详情 参数geohash--经纬度
export const reqAddress = geohash => ajax(`${BASE_URL}/position/${geohash}`)

...略过
//获取mockjs模拟的后端商家数据--路径不加api,此请求不从代理走
export const reqShopRating=()=>ajax('/shop_ratings') //【1】评价列表

3)mutations.js

import {
//商家相关以下3个
  RECEIVE_INFO,
  RECEIVE_RATINGS, //【0】商家评价mutations类型
 
} from './mutation-types.js'

export default{
 [RECEIVE_INFO](state,{info}){state.info=info},
 //【1】商家评价列表
 [RECEIVE_RATINGS](state,{ratings}){state.ratings=ratings},
 
 略过...
}

4)actions.js

// 控制mutations
import {
  ...
  RECEIVE_INFO,//商家相关3个
  RECEIVE_RATINGS,//【1】
  RECEIVE_GOODS,
...
} from './mutation-types.js'
import {
  ...
  reqShopRating,//【2】
  reqShopInfo,
} from '../api/index.js'

export default{
	

	//异步获取商家信息
	async getShopInfo({commit}){
		const result=await reqShopInfo()
		if(result.code==0){	
			const info=result.data
			commit(RECEIVE_INFO,{info})
		}
	},

	// 【3】异步获取商家评价列表
	async getShopRatings({commit}, callback) {
		const result = await reqShopRating()
		if (result.code === 0) {
	  const ratings = result.data
	  commit(RECEIVE_RATINGS, {ratings})
	  // 【4】数据更新了, 通知一下组件内的回调函数此处是滑动组件函数
	  callback && callback()
		}
	},

	
	
}

5)加载数据shop/rating/rating.vue

<script>
  import {mapState} from 'vuex'
  
  export default{
    mounted(){
    //【1】触发action发送ajax请求获取评价列表数据,并调用mutations保存到vuex状态ratings[]中
      this.$store.dispatch('getShopRatings')
    },
    computed:{
    //【2】拿到店铺信息和评价列表
      ...mapState(['info','ratings'])
    }
  }
</script>

效果:成功加载到数据http://localhost:8080/#/shop/rating

在这里插入图片描述

二、滑动better-scroll

shop/rating/ratings.vue

<div class="ratings" ref="ratings">...


import BScroll from '@better-scroll/core'

  export default{
  
    mounted(){
    /*【1】触发action发送ajax请求获取评价列表数据,
    并调用mutations保存到vuex状态ratings[]中
    此处传入回调函数,在actions中要对应上  callback见*/
      this.$store.dispatch('getShopRatings',()=>{
        this.$nextTick(()=>{
          // BScroll第一个参数可以是类名也可以用ref选中DOM
            new BScroll(this.$refs.ratings,{
            click:true
          })
        })
      })
    }
    
}

完成即有滚动效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值