本文介绍: 原因: 这是因为子组件挂载时候,值在父组件里也是为空的,后来父组件做了请求之类的工作后,更新这个然后往子组件里面传递,所以开始挂载时候是值是空的,后来才有值,所以html看起来能渲染出来,实际它之前渲染一次空的了,只不过两次时间间隔可能比较短。问题vue组件传的值,子组件模板中能渲染,但是mounted打印出来为空解决方法是用watch监听Props中的数据然后做出响应操作方法二、用watch监听Props中的数据然后做出响应的操作

问题vue 父组件传的值,子组件模板中能渲染,但是mounted打印出来为空

<template&gt;
	<div class="manage_page fillcontain"&gt;
    <Test :datas="array" /&gt;
  	</div&gt;
</template>

<script>
import Test from '../components/test.vue'
    export default {
		computed: {
			defaultActive: function(){
				return this.$route.path.replace('/', '');
			}
		},
    components:{
      Test
    },
    data(){
      return {
        array:[]
      }
    },
    mounted(){
      // 模拟接口
      setTimeout(()=>{
        this.array = [
          'a','b','c','d','e','f'
        ]
      })
    },
    methods:{

    }
    }
</script>


<style lang="less" scoped>
	@import '../style/mixin';
	.manage_page{
		
	}
</style>
<template>
    <div>
        <div v-for="item in datas" :key="item">{{ item }}</div>
    </div>
</template>
<script>
export default {
    data() {
        return {};
    },
    props:{
      datas:{
        type:Array
      }
    },
    created(){
      console.log(this.datas); // 打印为空,在mounted一样
    },
    methods: {
        handleChange(value) {
            console.log(value);
        },
    },
};
</script>

原因: 这是因为子组件挂载时候,值在父组件里也是为空的,后来父组件做了请求之类的工作后,更新这个然后往子组件里面传递,所以开始挂载时候是值是空的,后来才有值,所以html看起来能渲染出来,实际它之前渲染过一次空的了,只不过两次时间间隔可能比较短。

解决方法是用watch监听Props中的数据然后做出响应的操作

方法一、使用vif ,等到父组件传值为空时再传入

 <Test :datas="array" v-if="array.length" />

方法二、用watch 来监听Props中的数据然后做出响应的操作

  watch:{
      datas:{
        handler(val){
          if(val.length){
            console.log(val,'val');
          }
        }
      }
    },

原文地址:https://blog.csdn.net/yusun1234/article/details/134693776

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_32256.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注