问题:父组件第一次传给子组件的值,子组件可以正常的接收并显示,后面父组件中的值发生变化后,子组件的值却没有同步更新。
原因:子组件只在初始化时,对父组件传过来的值进行接收并赋值给data中的一个变量,后面父组件传过来的值改变,却没有重新给子组件中的变量进行赋值操作
方法一:
通过watch动态监听父组件传过来值的变化,并给子组件定义的变量重新赋值
方法二:
思路:由于子组件中的变量是初始化时进行赋值,所以每当父组件中的值发生变化,重新渲染一下子组件。
解决一:给子组件动态绑定一个key,由于key作为组件的唯一标识,key一改变,子组件就会被重新渲染,子组件中的值会被重新赋值。当父组件中传给子组件的数据改变时,重新给key赋予新的值(可用时间戳)。key作为
解决二:
//父组件
<template>
<Child v-if="isRouterAlive"/>
</template>
<script>
import Child from './Child'
export default {
components:{
Child
},
data () {
return {
isRouterAlive: true
}
},
methods: {
reload () {
this.isRouterAlive = false
this.$nextTick(() => (this.isRouterAlive = true))
}
}
}
</script>
当数据改变时
this.reload()