小程序
小游戏
企业微信
微信支付
扫描小程序码分享
组件js
组件引用
打印结果
7 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
这个问题是异步加载数据时,组件已经挂载上了,但是异步的数据还没回来,所以props里是没有数据的
解决办法有两个:
1.给对应的props添加observers,监听数据初始然后再调用组件方法
2.在容器(上级页面或者组件)中控制渲染,等异步数据已经加载完成后再渲染子组件,也就是用`wx:if={{ data }}`控制子组件渲染,这样子组件挂载后就直接有props的数据了
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
解决了吗?ios的问题
在生命周期函数里面新声明一个变量,将this.data赋值给它,这个变量可以正常获取到值,我就是这么干的
最后这个怎么解决的,楼主帮忙啊
我也碰到了这个问题呀 直接看data中这个值存在,单独取出来就发现没有了 求解呀
这个也是空的 我这个是音频列表 我想在组件初始化的时候默认列表第一个url this.data 有数据 this.data.audiolist 就是[]
麻烦提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)
https://developers.weixin.qq.com/s/dFoXu7mZ7W9G
求解救,这个问题怎么解决
你好,没看懂想干什么。但是expiredate 肯定是可以拿到并且设置的。
根据你提供的代码片段改动了一下:
https://developers.weixin.qq.com/s/BBTiOdmS7Q9I
就是说,上传到体验版之后,请求后台数据之后,ios系统observers就监听不到组件父页面传递过来的数据,一直为初始值0,但是安卓可以,开发工具也可以,真机测试也可以!这涉及到数据请求,而数据请求又涉及到登陆验证等一系列问题,我没办法通过代码片段给你们复现,只能通过setTimeout模拟数据请求的时间(虽然这不科学,但是我只是告诉你们体验版在请求后台数据之后,组件监听不到夫页面传递过去的数据,或者说父页面根本没有传递数据过去)
我发截图吧
父页面
你修改的代码肯定是可行的,我说的是体验版在请求后台数据后,组件没办法监听到数据,你的demo是直接setData是可行的,这个我知道,所以我一直在强掉,请求后台数据,并且是ios运行体验版!体验版! 开发工具、真机测试、体验版在安卓上运行都没有任何问题,唯独ios不行,我不知道怎么回事
有代码片段么?
组件wxml
<view class="countdown countdown-class">
{{ time }}
</view>
js
Component({
properties: {
expiredate: Number,
format: Array,
},
data: {
time:
''
,
expiredate:
lifetimes: {
ready() {
console.log(
this
.data)
.data.expiredate)
}
});
组建所在页面wxml引用组件
<
count-down
expiredate
=
"{{ goodsDetail.expireDate }}"
format
"{{ detailFormat }}"
></
>
组建所在页面js
//获取应用实例
const app = getApp();
Page({
title:
goodsDetail: '',
onLoad(options) {
.getDetail();
onShow() {
getDetail() {
let that =
;
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);
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
这个问题是异步加载数据时,组件已经挂载上了,但是异步的数据还没回来,所以props里是没有数据的
解决办法有两个:
1.给对应的props添加observers,监听数据初始然后再调用组件方法
2.在容器(上级页面或者组件)中控制渲染,等异步数据已经加载完成后再渲染子组件,也就是用`wx:if={{ data }}`控制子组件渲染,这样子组件挂载后就直接有props的数据了
解决了吗?ios的问题
在生命周期函数里面新声明一个变量,将this.data赋值给它,这个变量可以正常获取到值,我就是这么干的
最后这个怎么解决的,楼主帮忙啊
我也碰到了这个问题呀 直接看data中这个值存在,单独取出来就发现没有了 求解呀
这个也是空的 我这个是音频列表 我想在组件初始化的时候默认列表第一个url this.data 有数据 this.data.audiolist 就是[]
麻烦提供能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)
https://developers.weixin.qq.com/s/dFoXu7mZ7W9G
求解救,这个问题怎么解决
你好,没看懂想干什么。但是expiredate 肯定是可以拿到并且设置的。
根据你提供的代码片段改动了一下:
https://developers.weixin.qq.com/s/BBTiOdmS7Q9I
就是说,上传到体验版之后,请求后台数据之后,ios系统observers就监听不到组件父页面传递过来的数据,一直为初始值0,但是安卓可以,开发工具也可以,真机测试也可以!这涉及到数据请求,而数据请求又涉及到登陆验证等一系列问题,我没办法通过代码片段给你们复现,只能通过setTimeout模拟数据请求的时间(虽然这不科学,但是我只是告诉你们体验版在请求后台数据之后,组件监听不到夫页面传递过去的数据,或者说父页面根本没有传递数据过去)
我发截图吧
父页面
组件js
你修改的代码肯定是可行的,我说的是体验版在请求后台数据后,组件没办法监听到数据,你的demo是直接setData是可行的,这个我知道,所以我一直在强掉,请求后台数据,并且是ios运行体验版!体验版! 开发工具、真机测试、体验版在安卓上运行都没有任何问题,唯独ios不行,我不知道怎么回事
有代码片段么?
组件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);
})
}
})