案例一

父组件parent.vue

// asyncData为异步获取的数据,想传递给子组件使用

父组件

import child from './child'

export default {

data: () => ({

asyncData: ''

}),

components: {

child

},

created () {

},

mounted () {

// setTimeout模拟异步数据

setTimeout(() => {

this.asyncData = 'async data'

console.log('parent finish')

}, 2000)

}

}

子组件child.vue

子组件{{childData}}

export default {

props: ['childData'],

data: () => ({

}),

created () {

console.log(this.childData) // 空值

},

methods: {

}

}

上面按照这里的解析,子组件的html中的{{childData}}的值会随着父组件的值而改变,但是created里面的却不会发生改变(生命周期问题)

案例二

parent.vue

父组件

import child from './child'

export default {

data: () => ({

asyncObject: ''

}),

components: {

child

},

created () {

},

mounted () {

// setTimeout模拟异步数据

setTimeout(() => {

this.asyncObject = {'items': [1, 2, 3]}

console.log('parent finish')

}, 2000)

}

}

child.vue

子组件

{{childObject.items[0]}}

export default {

props: ['childObject'],

data: () => ({

}),

created () {

console.log(this.childObject) // 空值

},

methods: {

}

}

created里面的却不会发生改变, 子组件的html中的{{{childObject.items[0]}}的值虽然会随着父组件的值而改变,但是过程中会报错

// 首先传过来的是空,然后在异步刷新值,也开始时候childObject.items[0]等同于''.item[0]这样的操作,

所以就会报下面的错

vue.esm.js?8910:434 [Vue warn]: Error in render function:

"TypeError: Cannot read property '0' of undefined"

针对二的解决方法:

1、使用v-if可以解决报错问题,和created为空问题

// parent.vue

父组件

import child from './child'

export default {

data: () => ({

asyncObject: '',

flag: false

}),

components: {

child

},

created () {

},

mounted () {

// setTimeout模拟异步数据

setTimeout(() => {

this.asyncObject = {'items': [1, 2, 3]}

this.flag = true

console.log('parent finish')

}, 2000)

}

}

//child.vue

子组件//不报错

{{childObject.items[0]}}

export default {

props: ['childObject'],

data: () => ({

}),

created () {

console.log(this.childObject)// Object {items: [1,2,3]}

},

methods: {

}

}

2、子组件使用watch来监听父组件改变的prop,使用methods来代替created

子组件

{{test}}

export default {

props: ['childObject'],

data: () => ({

test: ''

}),

watch: {

'childObject.items': function (n, o) {

this.test = n[0]

this.updata()

}

},

methods: {

updata () { // 既然created只会执行一次,但是又想监听改变的值做其他事情的话,只能搬到这里咯

console.log(this.test)// 1

}

}

}

3、子组件watch computed data 相结合,有点麻烦

子组件

{{test}}

export default {

props: ['childObject'],

data: () => ({

test: ''

}),

watch: {

'childObject.items': function (n, o) {

this._test = n[0]

}

},

computed: {

_test: {

set (value) {

this.update()

this.test = value

},

get () {

return this.test

}

}

},

methods: {

update () {

console.log(this.childObject) // {items: [1,2,3]}

}

}

}

4、使用emit,on,bus相结合

子组件

{{test}}

export default {

props: ['childObject'],

data: () => ({

test: ''

}),

created () {

// 绑定

this.$bus.on('triggerChild', (parmas) => {

this.test = parmas.items[0] // 1

this.updata()

})

},

methods: {

updata () {

console.log(this.test) // 1

}

}

}

这里使用了bus这个库,parent.vue和child.vue必须公用一个事件总线(也就是要引入同一个js,这个js定义了一个类似let bus = new Vue()的东西供这两个组件连接),才能相互触发

5、使用prop default来解决{{childObject.items[0]}}

父组件

import child from './child'

export default {

data: () => ({

asyncObject: undefined // 这里使用null反而报0的错

}),

components: {

child

},

created () {

},

mounted () {

// setTimeout模拟异步数据

setTimeout(() => {

this.asyncObject = {'items': [1, 2, 3]}

console.log('parent finish')

}, 2000)

}

}

子组件

{{childObject.items[0]}}

export default {

props: {

childObject: {

type: Object,

default () {

return {

items: ''

}

}

}

},

data: () => ({

}),

created () {

console.log(this.childObject) // {item: ''}

}

}

vue异步数据 报错_VUE 异步数据传递给 component props 的问题相关推荐

  1. vue异步数据 报错_vue中异步请求数据,异步请求还没完成,文件就执行了就会报错,怎么解决?...

    vue中,axios异步加载数据,但是有的文件里面需要用到异步拿到的数据,数据还没拿到,文件已经执行了,这时候数据就是空,就会报错,这个问题怎么解决? 具体表现: 我这边vue项目是进入页面的时候会调 ...

  2. vue add element报错_Vue 源码解析 -- new Vue -gt; mountComponent 001

    这一系列文章的学习出处于Vue.js 技术揭秘 | Vue.js 技术揭秘,有兴趣的伙伴自行阅览 本文涉及到vue源码文件中的 src/core/instance/index.js ==> ne ...

  3. vue 打包路由报错_Vue下路由History模式打包后页面空白的解决方法

    vue的路由在默认的hash模式下,默认打包一般不会有什么问题,不过hash模式由于url会带有一个#,不美观,而且在微信分享,授权登录等都会有一些坑.所以history模式也会有一些应用场景.新手往 ...

  4. vue中打包报错Multiple chunks emit assets to the same filename static/js/chunk-6c337256.33476c81.js

    引了几个bpmn的包,导致Jenkins部署报错,找原因一直以为是引入的包有问题,后来发现是在打包的过程中会对生成的文件切割导致文件名重复了,在vue.config.js中配置以下配置完美解决,之前我 ...

  5. 使用np.load()加载数据 报错 Object arrays cannot be loaded when allow_pickle=False

    使用np.load()加载数据 报错 Object arrays cannot be loaded when allow_pickle=False https://blog.csdn.net/weix ...

  6. vue解决启动报错cjs loader.js Error: Cannot find module ‘../config‘问题

    vue解决启动报错cjs loader.js Error: Cannot find module '../config'问题 参考文章: (1)vue解决启动报错cjs loader.js Error ...

  7. vue启动项目报错:npm ERR! missing script: serve解决方法

    vue启动项目报错:npm ERR! missing script: serve解决方法 1.vue启动项目报错:npm ERR! missing script: serve 问题原因: 在配置文件中 ...

  8. vue 兼容IE报错解决方案

    vue 兼容IE报错解决方案 参考文章: (1)vue 兼容IE报错解决方案 (2)https://www.cnblogs.com/candymanping/p/10195377.html 备忘一下.

  9. 解决vue项目格式报错问题_@jie

    vue项目格式报错问题: 简述问题:写项目过程中格式一直报错,如下图: 第一步:在项目根目录下创建名为vue.config.js文件,如下图: 第二步:js文件中的内容,如下图: 代码如下: modu ...

最新文章

  1. Android ContentProvider和getContentResolver
  2. 08-Windows Server 2012 R2 会话远程桌面-标准部署-使用PowerShell进行部署2-1
  3. 第三次学JAVA再学不好就吃翔(part42)--内部类概述
  4. 微软高管解读财报:努力创新云基础架构
  5. LeetCode 6039. K 次增加后的最大乘积(优先队列)
  6. 2017.9.5.1.语文
  7. 静能沉淀浮躁,过滤浅薄,调节精神。 静能解读生命的安宁,拥有了然于心的平静。...
  8. css3获取当前时间并显示,实时获取当前时间并展示在页面上
  9. atitit.团队建设--要不要招技术储备人才的问题
  10. 用极大似然法估计因子载荷矩阵_spss教程:因子分析
  11. 光子晶体和深度学习结合进行多相流检测
  12. android开发学习:打电话和发短信
  13. 「python自学建议贴」Python学习路线+视频教程完整版
  14. 书到用时方恨少? 整理了一份初中、高中数学教材pdf 百度云
  15. html中蝴蝶飞飞怎么制作,【幼儿园折纸蝴蝶教案】手工折纸蝴蝶教案_幼儿园手工蝴蝶教案_亲亲宝贝网...
  16. 了解多层交换中的CEF FIB CAM TCAM
  17. wsl2下安装lammps
  18. 跨境电商亚马逊运用淘宝无货源店群模式?三点不可为
  19. Matlab进行彩色图像直方图匹配(不用histeq函数)
  20. (二 以及全部) 蓝眼睛ServiceMix教程 第一版

热门文章

  1. c++删除数组中重复元素_在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法...
  2. fpga多摩川编码器开源代码_F28379D之CLB解码多摩川编码器1——入手小知识(原创)...
  3. 零基础适合学python吗-零基础适合学Python吗?小白能否学会Python?
  4. python自动化办公演示视频-2020年最新Python自动化办公视频教程(2020/9/3)
  5. python入门教程(非常详细)-python初学者怎么入门:python入门教程非常详细
  6. HTML5语音识别(已被抛弃)
  7. python导入模块中的对象_详解Python项目开发时自定义模块中对象的导入和使用
  8. python怎么将json文件转为xls文件_基于python实现把json数据转换成Excel表格
  9. logisim输出变成红色的e_新款E刚出就被骂最丑,却销量可观,梅赛德斯:都是小事儿,上AMG...
  10. vue router.beforeEach跳转路由验证用户登录状态