详解vue2父组件传递props异步数据到子组件的问题

前端之家收集整理的这篇文章主要介绍了详解vue2父组件传递props异步数据到子组件的问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

测试环境:vue v2.3.3, vue v2.3.1

案例一

父组件parent.vue

获取的数据,想传递给子组件使用

child.vue

子组件

{{$store.state.index.asyncData.items[0]}}

{{$store.state.index.asyncData.items[0]}}可以取到改变的值,但是过程中还是出现这样的报错,原因同上

代码如下:

所以这里的解决方法是:vuex结合computed、mapState或者合computed、mapGetters

parent.vue

父组件
@H_502_12@

child.vue

子组件

{{item0}}

{{item}}

@H_502_12@

index.js

const actions = {
asyncAction ({ commit }) {
setTimeout(() => {
commit('asyncMutation',3]})// 作为参数,去调用mutations中的asyncMutation方法来对state改变
},2000)
}
}
const getters = {
getAsyncData: state => state.asyncData
}

const mutations = {
asyncMutation (state,params) {
state.asyncData = params.items[0] // 此时params={'items': [1,3]}被传过来赋值给asyncData,来同步更新asyncData的值,这样html就可以拿到asyncData.items[0]这样的值了
}
}

export default {
state,mutations
}

注意上面的

如果写成这样的话

首先asyncAction是个异步的操作,所以asyncData默认值为空,那么还是导致,child.vue这里报0的错

子组件

{{item0}}

{{item}}

@H_502_12@

不过根据以上的案例,得出来一个问题就是异步更新值的问题,就是说开始的时候有个默认值,这个默认值会被异步数据改变,比如说这个异步数据返回的object,如果你用props的方式去传递这个数据,其实第一次传递的空值,第二次传递的是更新后的值,所以就出现{{childObject.items[0]}}类似这种取不到值的问题,既然说第一次是空值,它会这样处理''.items[0],那么我们是不是可以在html判断这个是不是空(或者在computed来判断是否为默认值),所以把案例二的child.vue

{{childObject != '' ? childObject.items[0]: ''}}

@H_502_12@

这样是可以通过不报错的,就是created是空值,猜想上面vuex去stroe也可以也可以这样做

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

猜你在找的Vue相关文章