前端(组件传参案例)

父组件(商品详情页)

子组件上边放大图

底下缩小轮播图

需求分析:父组件获取图片数据,传给底下子组件进行进行轮播,实现父组件给子组件传参。然后底下子组件轮播后,把当前图片下标给父组件,实现子组件给父组件传参。父组件然后把要展示的图片下标以及数据给上边组件,实现兄弟组件传参。

第一步:父组件获取数据传给子组件

父组件获取数据的json数据

复制代码
let s = `{
  "code": 200,
  "message": "成功",
  "data": {
    "valuesSkuJson": "{\\"3\\":3}",
    "price": 5999,
    "categoryView": {
      "id": 61,
      "category1Id": 2,
      "category1Name": "手机",
      "category2Id": 13,
      "category2Name": "手机通讯",
      "category3Id": 61,
      "category3Name": "手机"
    },
    "spuSaleAttrList": [
      {
        "id": 2,
        "spuId": 1,
        "baseSaleAttrId": 2,
        "saleAttrName": "版本",
        "spuSaleAttrValueList": [
          {
            "id": 3,
            "spuId": 1,
            "baseSaleAttrId": 2,
            "saleAttrValueName": "8G+128G",
            "saleAttrName": "版本",
            "isChecked": "1"
          }
        ]
      }
    ],
    "skuInfo": {
      "id": 1,
      "spuId": 1,
      "price": 5999,
      "skuName": "小米10 至尊纪念版 双模5G 骁龙865  120W快充 8GB+128GB 陶瓷黑 游戏手机",
      "skuDesc": "小米10 至尊纪念版 双模5G 骁龙865 120HZ高刷新率 120倍长焦镜头 120W快充 12GB+256GB 陶瓷黑 游戏手机",
      "weight": "1.00",
      "tmId": 1,
      "category3Id": 61,
      "skuDefaultImg": "http://39.98.123.211/group1/M00/00/01/rBHu8l-rfvmAIpgZAAIvrX6L9fo612.jpg",
      "isSale": 1,
      "createTime": "2021-12-10 09:31:42",
      "skuImageList": [
        {
          "id": 1,
          "skuId": 1,
          "imgName": "ead186426badb626.jpg",
          "imgUrl": "http://39.98.123.211/group1/M00/00/01/rBHu8l-rfvmAHpFuAACTenfIJWo734.jpg",
          "spuImgId": 2,
          "isDefault": "0"
        },
        {
          "id": 2,
          "skuId": 1,
          "imgName": "b58ab2d79b859f39.jpg",
          "imgUrl": "http://39.98.123.211/group1/M00/00/01/rBHu8l-rfvmAcbl2AAFopp2WGBQ404.jpg",
          "spuImgId": 3,
          "isDefault": "0"
        },
        {
          "id": 3,
          "skuId": 1,
          "imgName": "0d93a071c839d890.jpg",
          "imgUrl": "http://39.98.123.211/group1/M00/00/01/rBHu8l-rfvmATs5EAABriLbF9vE207.jpg",
          "spuImgId": 4,
          "isDefault": "0"
        },
        {
          "id": 4,
          "skuId": 1,
          "imgName": "a7b1125239354d0d.jpg",
          "imgUrl": "http://39.98.123.211/group1/M00/00/01/rBHu8l-rfvmAeWopAAEtpBjP1VQ788.jpg",
          "spuImgId": 5,
          "isDefault": "0"
        },
        {
          "id": 5,
          "skuId": 1,
          "imgName": "6029cb2c2b2c7668.jpg",
          "imgUrl": "http://39.98.123.211/group1/M00/00/01/rBHu8l-rfvmAZJX2AAGmVo8Tz9s683.jpg",
          "spuImgId": 6,
          "isDefault": "0"
        },
        {
          "id": 6,
          "skuId": 1,
          "imgName": "2ff0882c9607e57c.jpg",
          "imgUrl": "http://39.98.123.211/group1/M00/00/01/rBHu8l-rfvmAIpgZAAIvrX6L9fo612.jpg",
          "spuImgId": 1,
          "isDefault": "1"
        }
      ],
      "skuAttrValueList": [
        {
          "id": 1,
          "attrId": 106,
          "valueId": 176,
          "skuId": 1,
          "attrName": "手机一级",
          "valueName": "安卓手机"
        },
        {
          "id": 2,
          "attrId": 107,
          "valueId": 177,
          "skuId": 1,
          "attrName": "二级手机",
          "valueName": "小米"
        },
        {
          "id": 3,
          "attrId": 23,
          "valueId": 83,
          "skuId": 1,
          "attrName": "运行内存",
          "valueName": "8G"
        },
        {
          "id": 4,
          "attrId": 24,
          "valueId": 82,
          "skuId": 1,
          "attrName": "机身内存",
          "valueName": "128G"
        }
      ],
      "skuSaleAttrValueList": [
        {
          "id": 1,
          "skuId": 1,
          "spuId": 1,
          "saleAttrValueId": 1,
          "saleAttrId": 1,
          "saleAttrName": "颜色",
          "saleAttrValueName": "陶瓷黑"
        },
        {
          "id": 2,
          "skuId": 1,
          "spuId": 1,
          "saleAttrValueId": 3,
          "saleAttrId": 2,
          "saleAttrName": "版本",
          "saleAttrValueName": "8G+128G"
        }
      ]
    }
  },
  "ok": true
}`;

使用 JSON.parse 方法将 JSON 字符串转换为 JavaScript 对象

复制代码
let data =ref(JSON.parse(s).data);

把数据传给下方子组件

复制代码
<spec-scroll :imgList="data.skuInfo.skuImageList" @getIndex="getIndex"></spec-scroll>

下方子组件接收父亲数据

复制代码
import {defineProps , defineEmits} from "vue"
let props = defineProps(["imgList"]);
let emits = defineEmits(["getIndex"]);
function handler(v){
  //将v传递给父组件
  emits("getIndex",v)
}

进行数据展示

复制代码
    <el-carousel @change="handler" >
      <el-carousel-item v-for="item in props.imgList" :key="item.id">
        <div class="carousel-image-container">
          <img :src="item.imgUrl" alt="Carousel Image" class="carousel-image">
        </div>
      </el-carousel-item>
    </el-carousel>

第二步子组件把自己下标通过父组件函数传给父组件

父组件子组件获取下标

复制代码
let index = ref(0);
function getIndex(v){
  console.log("组件的下标:"+v)
  index.value = v;
}

第三步父组件把下方组件下标和数据给上方组件

复制代码
<preview :imgList="data.skuInfo.skuImageList" :index="index"></preview>

上方组件接收父亲给的下标和数据

复制代码
import { defineProps } from 'vue';
// 定义 props
const props = defineProps({
  index: {
    type: Number,
    required: true
  },
  imgList: {
    type: Array,
    required: true
  }
});

最后展示图片

复制代码
  <div class="preview">
    <div class="jqzoom">
      <!-- 动态绑定 img 的 src 属性 -->
      <img :src="props.imgList[props.index].imgUrl" alt="Preview Image" />
    </div>
  </div>
相关推荐
子兮曰4 小时前
Bun v1.3.14 深度解析:Image API、HTTP/3、全局虚拟存储与五十项变革
前端·后端·bun
kyriewen5 小时前
今天,百年巨头一次砍了9200人,而一个离职科学家的实话让全网睡不着觉
前端·openai·ai编程
问心无愧05136 小时前
ctf show web 入门42
android·前端·android studio
kyriewen6 小时前
老板逼我上AI,我偷偷在浏览器里跑LLaMA,省下20万API费
前端·react.js·llm
Beginner x_u6 小时前
前端八股整理(手写 02)|数组转树、数组扁平化、随机打乱一个数组
前端·数组·数组转树·数组扁平化
KaMeidebaby6 小时前
卡梅德生物技术快报|禽类成纤维细胞 FISH 实验:鸟类性别染色体基因定位技术实现与数据验证
前端·数据库·其他·百度·新浪微博
天若有情6736 小时前
前端高阶性能优化:跳出传统懒加载与预加载,基于用户行为做轻量预判加载
前端·性能优化
小小小小宇7 小时前
前端转后端:SQL 是什么
前端
张元清8 小时前
React Observer Hooks:7 种监听 DOM 而不写样板代码的方式
前端·javascript·面试
广州华水科技8 小时前
单北斗GNSS变形监测是什么?主要有怎样的应用与优势?
前端