【小程序系列】[03] 商品

42 阅读1分钟

轮播图和预览效果

<swiper :indicator-dots="true" :autoplay="true" :interval="3000" :duration="1000" :circular="true">
		  <swiper-item v-for="(item,index) in goods_info.pics" :key="index">
		    <image :src="item.pics_big"  @click="preview(index)"></image>
		  </swiper-item>
</swiper>
methods:{
        // 定义请求商品详情数据的方法
        async getGoodsDetail(goods_id) {
          const { data: res } = await uni.$http.get('/api/public/v1/goods/detail', { goods_id })
          if (res.meta.status !== 200) return uni.$showMsg()
          // 使用字符串的 replace() 方法,为 img 标签添加行内的 style 样式,从而解决图片底部空白间隙的问题
          // 使用字符串的 replace() 方法,将 webp 的后缀名替换为 jpg 的后缀名
            res.message.goods_introduce = res.message.goods_introduce.replace(/<img /g, '<img style="display:block;" ').replace(/webp/g, 'jpg')
          // 为 data 中的数据赋值
          this.goods_info = res.message
        },
        // 实现轮播图的预览效果
        preview(index) {
          // 调用 uni.previewImage() 方法预览图片
          uni.previewImage({
            // 预览时,默认显示图片的索引
            current: index,
            // 所有图片 url 地址的数组
            urls: this.goods_info.pics.map(x => x.pics_big)
          })
        }
    },
    onLoad(options) {
      // 获取商品 Id
      const goods_id = options.goods_id
      // 调用请求商品详情数据的方法
      this.getGoodsDetail(goods_id)
    }
	}

一个坑关于初始值给NULL和 {}

如果初始值写{}空对象,那么点一个东西不存在,不会报错
但是如果为null,就会报错提示点之前是无效数据.点不出来

随便给一个能渲染出来的值来判断就可以了

  <view v-if="goods_info.goods_name">
data() {
			return {
				 // 商品详情对象
				    goods_info: {}
			};
		},

在这里插入图片描述