父组件通过Promise
等其他异步方式获取异步数据,并传递给子组件,子组件直接显示没有问题,若对数据进行处理,则拿到的数据都是父组件初始值。
父组件通过Promise
等其他异步方式获取异步数据,在尚未等到数据返回时,子组件 created
已经执行完毕,故此时子组件中的数据为父组件上次的数据。
父子组件的生命周期:
一、加载渲染过程
父beforeCreate–> 父created–>父beforeMount–>子 beforeCreate–> 子 created–>子
beforeMount–>子 mounted–>父mounted
二、子组件更新过程
父beforeUpdate --> 子 beforeUpdate–> 子 updated–> 父updated
三、销毁过程
父beforeDestroy --> 子 beforeDestroy–> 子 destroyed–> 父destroyed
父组件
<child :child-data="asyncData" v-if="asyncData"></child>
当asyncData
有值得时候,再加载子组件。
评价:在asyncData
为对象或数组元素,子组件获取对象属性或某一数组元素时,以上方法可行(不会报错),但仍会存在数据加载显示缓慢情形(及子组件首先显示的仍是上次父组件传值,然后才会渲染为当前父组件传值)。
子组件
watch:{childData(val){console.log('子组件 数据处理',val)}
}
评价: 以上方法仍会出现方法一中的数据加载缓慢问题。
<template><div>子组件<p>{{test}}</p></div>
</template><script>export default {props: ['tableData'],data: () => ({test: ''}),watch: {tableData (val) {this.dataResult = val}},computed: {dataResult : {set (value) {this.update()st = value},get () {st}}},methods: {update () {console.log(this.childObject) // {items: [1,2,3]}}}}
</script>
<template><div>子组件<p>{{test}}</p></div>
</template><script>export default {props: ['childObject'],data: () => ({test: ''}),created () {// 绑定this.$('triggerChild', (parmas) => {st = parmas.items[0] // 1this.updata()})},methods: {updata () {console.st) // 1}}}
</script>
这里使用了bus
这个库,parent.vue
和child.vue
必须公用一个事件总线(也就是要引入同一个js
,这个js
定义了一个类似let bus = new Vue()
的东西供这两个组件连接),才能相互触发。
将数据存到store
,子组件监听数据变化(watch/computed
)。
异步获取数据导致的报错的情况会在各个场景出现,比如:
dom
,而对dom
有js
操作的时候,会因为还没渲染出来而找不到相应的dom
元素报错,这里可以用vue
提供的$nextTick()
函数,或者手动开个setTimeout
定时器,延迟获取;better-scroll
的时候因为dom
没有渲染出来而无法获取滚动元素的高度,导致无法滚动,同样可以用vue
提供的这个函数,等dom
渲染完了后再初始化滚动。本文发布于:2024-02-01 04:54:51,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170673449334019.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |