收藏
回答

自定义组件properties里面的属性值无法获取

组件js




组件引用




打印结果



回答关注问题邀请回答
收藏

7 个回答

  • maxm
    maxm
    2020-08-26

    这个问题是异步加载数据时,组件已经挂载上了,但是异步的数据还没回来,所以props里是没有数据的

    解决办法有两个:

    1.给对应的props添加observers,监听数据初始然后再调用组件方法

    2.在容器(上级页面或者组件)中控制渲染,等异步数据已经加载完成后再渲染子组件,也就是用`wx:if={{ data }}`控制子组件渲染,这样子组件挂载后就直接有props的数据了

    2020-08-26
    有用 2
    回复
  • 2019-12-17

    解决了吗?ios的问题

    2019-12-17
    有用 1
    回复
  • curiosity
    curiosity
    2020-06-30

    在生命周期函数里面新声明一个变量,将this.data赋值给它,这个变量可以正常获取到值,我就是这么干的

    2020-06-30
    有用
    回复
  • 超
    2019-12-31

    最后这个怎么解决的,楼主帮忙啊

    2019-12-31
    有用
    回复
  • 陈。。。
    陈。。。
    2019-09-04

    我也碰到了这个问题呀 直接看data中这个值存在,单独取出来就发现没有了 求解呀

    2019-09-04
    有用
    回复 3
    • 粗茶淡饭
      粗茶淡饭
      2019-09-16
      解决了吗?
      2019-09-16
      回复
    • 陈。。。
      陈。。。
      2019-09-16回复粗茶淡饭
      解决了 在组件里用observe监控那个变量就行了
      2019-09-16
      回复
    • 粗茶淡饭
      粗茶淡饭
      2019-09-16回复陈。。。


      这个也是空的 我这个是音频列表 我想在组件初始化的时候默认列表第一个url this.data 有数据 this.data.audiolist 就是[]

      2019-09-16
      回复
  • 灵芝
    灵芝
    2019-06-14

    麻烦提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html

    2019-06-14
    有用
    回复 7
    • Xurry
      Xurry
      2019-06-14

      https://developers.weixin.qq.com/s/dFoXu7mZ7W9G

      求解救,这个问题怎么解决

      2019-06-14
      回复
    • 寂
      2019-06-18回复Xurry

      你好,没看懂想干什么。但是expiredate 肯定是可以拿到并且设置的。


      根据你提供的代码片段改动了一下:

      https://developers.weixin.qq.com/s/BBTiOdmS7Q9I


      2019-06-18
      回复
    • Xurry
      Xurry
      2019-06-19回复

      就是说,上传到体验版之后,请求后台数据之后,ios系统observers就监听不到组件父页面传递过来的数据,一直为初始值0,但是安卓可以,开发工具也可以,真机测试也可以!这涉及到数据请求,而数据请求又涉及到登陆验证等一系列问题,我没办法通过代码片段给你们复现,只能通过setTimeout模拟数据请求的时间(虽然这不科学,但是我只是告诉你们体验版在请求后台数据之后,组件监听不到夫页面传递过去的数据,或者说父页面根本没有传递数据过去)

      2019-06-19
      回复
    • Xurry
      Xurry
      2019-06-19回复

      我发截图吧


      父页面



      组件js


      2019-06-19
      回复
    • Xurry
      Xurry
      2019-06-19回复

      你修改的代码肯定是可行的,我说的是体验版在请求后台数据后,组件没办法监听到数据,你的demo是直接setData是可行的,这个我知道,所以我一直在强掉,请求后台数据,并且是ios运行体验版!体验版! 开发工具、真机测试、体验版在安卓上运行都没有任何问题,唯独ios不行,我不知道怎么回事

      2019-06-19
      回复
    查看更多(2)
  • 大兵
    大兵
    2019-06-14

    有代码片段么?

    2019-06-14
    有用
    回复 1
    • Xurry
      Xurry
      2019-06-14

      组件wxml

      <view class="countdown countdown-class">

      {{ time }}

      </view>

      js

      Component({
        properties: {
          expiredate: Number,
          format: Array,
        },
        data: {
          time: '',
          expiredate: ''
        },
        lifetimes: {
          ready() {
            console.log(this.data)
            console.log(this.data.expiredate)
          }
        }
      });

      组建所在页面wxml引用组件

      <count-down expiredate="{{ goodsDetail.expireDate }}" format="{{ detailFormat }}"></count-down>


      组建所在页面js

      //获取应用实例
      const app = getApp();
       
      Page({
        data: {
          title: '',
          goodsDetail: '',
          
        },
       
        onLoad(options) {
       
          this.getDetail();
        },
        
        onShow() {
          

        },


        getDetail() {
           
          let that = this;

          let goodsDetailUrl = Api.getGrouponDetailUrl();


          let detaiLArgs = {
            token: that.data.authData.tokenId,
            grouponId: that.data.grouponId

          }


          //请求方法重新封装的,请忽略

          wxRequest.postRequest(goodsDetailUrl, detaiLArgs).then(res => {
       
            if (res.statusCode == 200 && res.data.success) {
       

              let goodsDetail = res.data.data;


              goodsDetail.expireDate = Util.toTimeStamp(goodsDetail.expireDate);
       
              that.setData({
                goodsDetail: goodsDetail
              })
       
            }
          }).catch(function (error) {
            console.log(error);
          })
        }
        
       
      })
         





      2019-06-14
      回复
登录 后发表内容