mpvue:父组件向子组件传值,子组件接收为空

在mpvue中,父组件在onLoad函数内获取了数据,使用子组件时传递给了子组件,但总是报错,发现子组件接收到的总是为undefined。接下来,我们先看看项目环境。我是在做我的收藏功能遇到这个问题的,在收藏页面中使用了自定义组件。

运行的时候发现一直报错,在子组件中将传入值打印了出来发现一直是undefined。之后我在pages/colletion/index.vue 下打印了将created函数、onLoad函数、onShow函数打印了一下。

运行小程序:

 

在vue中我们习惯在created中准备数据,在渲染的时候,数据已经准备好了。但是在mpvue中,所有页面的created函数是在小程序一开始的时候就被一次性执行。我们只能在每个页面的onLoad(),也就是页面加载阶段准备数据。这也造成了,有时候数据还没准备好,就已经向子组件传值了。解决方案有两个,一个是使用子组件的时候使用v-if。另一个是使用$nextTick。下面贴出使用$nextTick方案的代码:

<template>
  <div>
    <waterfall :dataList='collections'></waterfall>
  </div>
</template>

<script>
import waterfall from '../../components/waterfall'
export default {
  data () {
    return {
      collections: []
    }
  },
  methods: {
    initData () {
      console.log('调用了collection的初始化数据函数')
      this.$http.get({
        'url': '/collection/my_collections'
      }).then((res) => {
        console.log('collection中获取数据完毕')
        this.$nextTick(() => {
          this.collections = res
        })
      })
    }
  },
  onLoad () {
    console.log('调用collection的onLoad')
    this.initData()
  },
  onShow () {
    console.log('调用了collection的onShow')
  },
  created () {
    console.log('调用collection的created')
  },
  components: {
    waterfall
  },
  //  下拉刷新事件
  onPullDownRefresh () {
    this.collections = []
    this.initData()
  }
}
</script>

<style scoped  lang="stylus" rel="stylesheet/stylus">
</style>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
mpvue 是一个基于 Vue.js 的小程序框架,它允许开发者使用 Vue.js 的语法来开发微信小程序。在 mpvue 中,可以通过自定义组件来实现组件的复用和模块化开发。 要创建一个自定义组件,首先需要在项目中创建一个以 `.vue` 后缀的文件,该文件即为组件文件。在组件文件中,可以使用 `<template>` 标签定义组件的模板,`<script>` 标签定义组件的逻辑,以及 `<style>` 标签定义组件的样式。 在组件文件中,可以通过 `export default` 导出一个 Vue 实例作为组件的定义。在组件定义中,可以使用 `props` 属性来接收组件传递数据,使用 `data` 属性来定义组件内部的数据,使用 `methods` 属性来定义组件的方法。 使用自定义组件时,需要在组件中引入并注册组件,然后在模板中使用组件的标签进行调用。 以下是一个简单的示例: ```vue <template> <div> <custom-component :prop1="data1" @event1="handleEvent"></custom-component> </div> </template> <script> import CustomComponent from '@/components/CustomComponent.vue' export default { components: { CustomComponent }, data() { return { data1: 'Hello', } }, methods: { handleEvent(eventData) { console.log(eventData) } } } </script> <style scoped> /* 组件样式 */ </style> ``` 在这个示例中,组件中使用了一个自定义组件 `CustomComponent`,通过 `:prop1` 属性将数据 `data1` 传递给了自定义组件,并通过 `@event1` 监听了自定义组件触发的事件,并在 `handleEvent` 方法中处理事件数据。 希望以上能解决你的问题,如果还有其他疑问,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值