vue 子组件不用传递参数即可修改父组件中的值的方法

142 篇文章 2 订阅

父组件代码:

<template>
  <div id="app">
      <test :user="user" @func="parentFunc()"/>
  </div>
</template>
<script>
    import test from "./components/test"
  export default {
    name: 'app',
	  data(){
    	return{
		  user:[
		  	{name:"jjw",age:18,sex:"boy"},
            {name:"zhangsan",age:28,sex:"boy"},
            {name:"lisi",age:20,sex:"boy"},
          ]
	    }
	  },
      components:{
		  test,
      },
      created(){
    	console.log("parent",this.user)
      },
      methods:{
		  parentFunc:function () {
              console.log("parentFunc",this.user)
		  }
      },
  }
</script>
<style >
</style>

子组件代码:

<template>
</template>
<script>
	export default {
		name: "test",
        props:{
            user:Array,
        },
        mounted() {
            console.log("sunComponent",this.user)
            this.user.map((item)=>{
                item.age+=10;
                return item
            })
            console.log("map after",this.user)
            this.$emit("func")
		}
	}
</script>
<style scoped>
</style>

函数执行的结果 

从观察结果来看确实是子组件把把父组件中的数组中的值给改了,不过要注意这里传递的是数组或者是对象,如果传递的是一个字段比如bool值或者是一个字符串,结果不一定,还没试验,但是还有一个问题就是为啥父组件和子组件第一次打印的时候的结果(没修改之前的结果)和修改后的结果是一样的?有待探究

补充:父标签中用this.$options.data()获取到的就是没有改变之前的数据

created(){
    	console.log("parent",this.$options.data().user)
    	console.log("parent",this.user)
},

结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值