父组件传递数据给子组件,子组件接收数据为空了

父组件传递数据给子组件,子组件接收数据为空了

产品详情页传递获取的数据给子组件渲染,但是子组件接收后数据就没了

父组件代码

<template>
    <div class="product">
      <div class="p-header-wrap">
        <product-header></product-header>
      </div>
      <div class="p-content">
        <me-scroll>
          <product-slider :picDatas="items"> </product-slider>
          <product-content :contentDatas="contents">
          </product-content>

        </me-scroll>
      </div>
      
    </div>
</template>

<script>
  import ProductSlider from './slider';
  import {getProductDetail} from 'api/product';
  import ProductHeader from 'pages/product/header';
  import ProductContent from 'pages/product/content';
  import MeScroll from 'base/scroll';

  export default {
    name: 'Product',
    components: {
      ProductHeader,
      ProductContent,
      MeScroll,
      ProductSlider
    },
    data(){
      return {
        items: [], //保存幻灯片数据,传递给子组件
        contents: {} //保存产品信息内容,传递给子组件
      }
    },
    created(){
      this.getData();
    },
    methods: {
      //获取幻灯片数据
      getData(){
        getProductDetail(this.$route.params.id).then(data =>{
          this.items = data.data.item.images;
          this.contents = data.data; //该数据传递给子组件,数据为空了
          console.log(this.contents)
        })
      }
    }
  };
</script>

<style 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;
  }
</style>

子组件代码

<template>
<div class="wraper">
<me-loading v-if="!contentDatas.length"></me-loading>
<div class="content-wraper" v-if="contentDatas.length">
<div class="base-info">
<div class="price-sales">
<p class="p-price">¥<span class="p-price-num">311</span></p>
<p class="p-sales">122已售</p>
</div>
<div class="p-des">
<p class="p-title">工装裤男士秋季潮牌束脚韩版潮流运动休闲长裤子宽松秋冬2019新款</p>
<p class="p-mix-info">
<span class="p-delivery">快递包邮</span>
<span class="month-sales">7415</span>
<span class="p-place">浙江嘉兴</span>
</p>

</div>
</div>
</div>
</div>


</template>
<script>

import MeLoading from 'base/loading';

export default{
name: "ProductContent",
props: {
contentDatas: {
tyle: Object,
default: {}
}
},
components: {
MeLoading
},
data(){
return {
datas: this.contentDatas
}

},
created(){
console.log(this.contentDatas)
},
methods: {

}
}

</script>
<style scoped>
@import "~assets/scss/mixins";

.price-sales{
background-color:$linear-gradient-bgc;

}

</style>

父组件中打印出来的数据

http://img1.sycdn.imooc.com//climg/5da7018409b18af812740756.jpg

子组件中打印出来的数据:没有数据了

http://img1.sycdn.imooc.com//climg/5da7024d09e3617b12880250.jpg

2、从接口https://unszacs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/获取到的数据,找了好久,没有找到价格和销量在哪里

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕星星 2019-10-17 16:02:32

同学你好,

1、对象是没有长度的,所以不能用length属性去判断,可以手动添加一个标志,例如loaded。

2、价格以及销量在apiStack属性值的value属性里面:

http://img1.sycdn.imooc.com//climg/5da81f49096cc5b810560250.jpg

参考修改:

父组件中:


http://img1.sycdn.imooc.com//climg/5da81f8009f686a507310060.jpg

http://img1.sycdn.imooc.com//climg/5da81f8909fca53302950157.jpg

http://img1.sycdn.imooc.com//climg/5da81fb2098c73c107910541.jpg子组件中:

http://img1.sycdn.imooc.com//climg/5da81fc409df86bc08740174.jpg

http://img1.sycdn.imooc.com//climg/5da8200c09d97b3109220113.jpg

http://img1.sycdn.imooc.com//climg/5da81fdc090231ac03470339.jpg

自己修改测试下,祝学习愉快!

欢迎采纳~

提问者 技术为王2383098363 2019-10-17 11:31:42
import axios from 'axios';
import jsonp from 'assets/js/jsonp';
import {SUCC_CODE, TIMEOUT, HOME_RECOMMEND_PAGE_SIZE, jsonpOptions} from './config';

// 获取商品详情页数据--jsonp
export const getProductDetail = id => {
  console.log(id);
  const url = 'https://unszacs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/';
  const params = {
    api: 'mtop.taobao.detail.getdetail',
    ttid: '2017@taobao_h5_6.6.0',
    data:`{"itemNumId":"${id}"}`,
    appKey: 12574478,
    dataType: 'jsonp',
    v: '6.0'
  };

  return jsonp(url, params, jsonpOptions).then(res => {
    if (res) {
      return res;
    }
    throw new Error('没有成功获取到数据!');
  }).catch(err => {
    if (err) {
      console.log(err);
    }
  }).then(res => {
    return new Promise(resolve => {
      setTimeout(() => {
        resolve(res);
      }, 1000);
    });
  });
};

api/product.js文件代码

好帮手慕星星 2019-10-17 09:49:38

同学你好,

建议将api/product.js文件代码粘贴上来,老师帮助你进行测试,便于准确定位问题所在。

祝学习愉快!

  • 提问者 技术为王2383098363 #1
    import axios from 'axios'; import jsonp from 'assets/js/jsonp'; import {SUCC_CODE, TIMEOUT, HOME_RECOMMEND_PAGE_SIZE, jsonpOptions} from './config'; // 获取商品详情页数据--jsonp export const getProductDetail = id => { console.log(id); const url = 'https://unszacs.m.taobao.com/h5/mtop.taobao.detail.getdetail/6.0/'; const params = { api: 'mtop.taobao.detail.getdetail', ttid: '2017@taobao_h5_6.6.0', data:`{"itemNumId":"${id}"}`, appKey: 12574478, dataType: 'jsonp', v: '6.0' }; return jsonp(url, params, jsonpOptions).then(res => { if (res) { return res; } throw new Error('没有成功获取到数据!'); }).catch(err => { if (err) { console.log(err); } }).then(res => { return new Promise(resolve => { setTimeout(() => { resolve(res); }, 1000); }); }); };
    2019-10-17 11:29:59
  • 提问者 技术为王2383098363 #2
    这是config.js 文件 export const SUCC_CODE = 0; export const TIMEOUT = 10000; export const HOME_RECOMMEND_PAGE_SIZE = 20; export const jsonpOptions = { param: 'callback', timeout: TIMEOUT };
    2019-10-17 11:30:42
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师