我现在是在子组件分别获取数据,如何写可以只在index中获取一次,别的组件调用
<template> <transition name="product"> <div class="product"> <header class="g-header-container"> <product-header></product-header> </header> <me-scroll> <product-slider></product-slider> <product-content></product-content> </me-scroll> </div> </transition> </template> <script> import {getProductDetail} from 'api/product'; import ProductHeader from './header'; import MeScroll from 'base/scroll'; import ProductSlider from './slider'; import ProductContent from './content'; export default { name: 'Product', components:{ ProductHeader, MeScroll, ProductSlider, ProductContent }, data(){ return { products:{} }; }, created(){ getProductDetail(this.$route.params.id).then(data => { //console.log(data.data); this.products=data.data; }); } }; </script> <style lang="scss" scoped> @import "~assets/scss/mixins"; .product { overflow: hidden; position: absolute; top: 0; left: 0; z-index: $product-z-index; width: 100%; height: 100%; background-color: $bgc-theme; } .product-enter-active, .product-leave-active { transition: all 0.3s; } .product-enter, .product-leave-to { transform: translate3d(100%, 0, 0); } .product-enter-to{ transform: translate3d(0, 0, 0); } </style>
<template> <div class="slider-wrapper"> <me-loading :text="'加载中'" v-if="!sliders.length"></me-loading> <me-slider :direction="direction" :loop="loop" :interval="interval" :pagination="pagination" :datas="sliders" v-else> <swiper-slide v-for="(item,index) in sliders" :key="index"> <a href="#" class="slider-link"> <img :src="item" alt="pic" class="slider-img"> </a> </swiper-slide> </me-slider> </div> </template> <script> import MeSlider from 'base/slider'; import {swiperSlide} from 'vue-awesome-swiper'; import {getProductDetail} from 'api/product'; import {sliderOptions} from './config'; import {getHomeSlider} from 'api/home'; import MeLoading from 'base/loading'; export default { name: 'HomeSlider', components:{ MeSlider, MeLoading, swiperSlide }, data(){ return{ direction:sliderOptions.direction, loop:sliderOptions.loop, interval:sliderOptions.interval, pagination:sliderOptions.pagination, sliders:[] }; }, created(){ this.getSliders(); }, methods:{ getSliders(){ getProductDetail(this.$route.params.id).then(data => { //console.log(data.data); this.sliders=data.data.item.images; }); } } }; </script> <style lang="scss" scoped> .slider-wrapper{ height: 300px; } .slider-link{ display: block; } .slider-link,.slider-img{ width: 100%; height: 100%; } </style>
<template> <div> <div> <p>¥{{content.seller.allItemCount}}</p> <p>{{content.seller.newItemCount}}件已售</p> </div> </div> </template> <script> import {getProductDetail} from 'api/product'; export default { data(){ return { content:{} }; }, created(){ this.getContent(); }, methods:{ getContent(){ getProductDetail(this.$route.params.id).then(data => { console.log(data.data); this.content=data.data; }); } } }; </script> <style lang="scss" scoped> </style>
<template> <me-navbar class="header"> <i class="iconfont" slot="left" @click="goBack"></i> <p slot="center">商品详情</p> <i class="iconfont" slot="right"></i> </me-navbar> </template> <script> import MeNavbar from "base/navbar"; export default { name: 'ProductHeader', components:{ MeNavbar }, data(){ return{ }; }, methods:{ goBack(){ this.$router.back(); } } }; </script> <style lang="scss" scoped> @import "~assets/scss/mixins"; .header{ background-color: $header-bgc-translucent; color: white; p{ text-align: center; } } </style>
48
收起
正在回答 回答被采纳积分+1
2回答
好帮手慕夭夭
2020-04-14 17:17:32
同学你好,问题解答如下:
1.如下报错意思是获取不到allItemCount属性。这是因为数据是异步请求过来的,当页面渲染用到这些数据时,数据还没有加载过来,获取不到就会报错。
可以加一个if判断,当获取到数据再渲染组件:
content是一个对象,我们可以先使用Object.keys把它转换为一个数组,然后再判断数组长度,如果长度为0,if判断则为false,此时就不会渲染组件了。
2.因为淘宝最近更新了一下接口的数据,有很多商品数据是和现在使用的对不上,所以浏览器中会报错。这是淘宝那边的问题,如果点击商品之后出现如下类似错误不用管,因为淘宝最近更新接口有一点频繁,有的商品数据是可以的,测试时如果遇到了此类的,可以多点几个商品试一试。
图片轮播区域,要获取到图片的数据,然后再传递给子组件,不然图片轮播的子组件中,使用的是所有的数据:
其他子组件传递数据也是同理,先定义一个变量获取指定的数据,然后再传递给子组件。最后子组件中,可以在生命周期中,即组件挂载成功之后,把数据赋值给你绑定的那个data。
祝学习愉快 ~
相似问题
登录后可查看更多问答,登录/注册
4.Vue与React高级框架开发
- 参与学习 人
- 提交作业 239 份
- 解答问题 10739 个
本阶段带你深入前端开发的肌理,通过ES6基础知识和前端主流高级框架的学习,助你快速构建企业级移动webAPP应用,进入职场的终极battle
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星