美文网首页
子组件想要修改父组件的数据,如果父组件中数据是一个对象这样改不算

子组件想要修改父组件的数据,如果父组件中数据是一个对象这样改不算

作者: jesse28 | 来源:发表于2021-02-17 06:53 被阅读0次

我们经常会说不能在子组件里面直接修改父组件的数据,但是这里如果父组件是一个对象的数据,那么改变对象的属性值这样是不算改的。不管父组件也好,子组件也好,我子组件拿到父组件的数据它其他指向的是同一个内存空间,所以并不是真的修改了父组件的数据。

Vue官网介绍


image.png
### 3. 单向数据流
  props是单向绑定的,当父组件的属性变化时,将传导给子组件,但是不会反过来
  而且不允许子组件直接修改父组件中的数据,报错
  解决方式:
      方式1:如果子组件想把它作为局部数据来使用,可以将数据存入另一个变量中再操作,不影响父组件中的数据
      方式2:如果子组件想修改数据并且同步更新到父组件,两个方法:
          a.使用.sync(1.0版本中支持,2.0版本中不支持,2.3版本又开始支持)
              需要显式地触发一个更新事件
          b.可以将父组件中的数据包装成对象,然后在子组件中修改对象的属性(因为对象是引用类型,指向同一个内存空间)---父组件也好,子组件也好,我子组件拿到父组件的数据它其他指向的是同一个内存空间--,推荐 --   

例子:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>单向数据流</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="itany">

        <h2>父组件:{{user.age}}</h2>

        <my-hello :name.sync="name" :user="user"></my-hello>
    </div>
    
    <template id="hello">
        <div>
            <h3>子组件:{{user.age}}</h3>
            <button @click="change">修改数据</button>
            <input type="text" v-model="user.age">
        </div>
    </template>

    <script>
        var vm=new Vue({ //父组件
            el:'#itany',
            data:{
                name:'tom',
                user:{
                    name:'zhangsan',
                    age:24
                }
            },
            components:{
                'my-hello':{ //子组件
                    template:'#hello',
                    props:['name','user'],
                    data(){
                        return {
                            username:this.name //方式1:将数据存入另一个变量中再操作
                        }
                    },
                    methods:{
                        change(){
                            // this.username='alice';
                            // this.name='alice';
                            // this.$emit('update:name','alice'); //方式2:a.使用.sync,需要显式地触发一个更新事件
                            this.user.age=18;
                        }
                    }
                }
            }
        }); 
    </script>
</body>
</html>
image.png

参考链接:https://www.cnblogs.com/loveliang/p/14134913.html

权限路由dialog的疑惑?


image.png

这边是不算修改了formData父组件的数据,因为我们父组件这个数据是对象,然后我们子子组件通过v-model这样改变了formData的属性值,内存地址的引用还是同一个地址空间的,所以修改了属性值是可以的

我们这边弹窗的数据也就是formData的数据最好定义在父组件index.vue里面,因为我们编辑edit的时候,那个edit.vue页面也会用到这个formData数据。

相关文章

  • 子组件想要修改父组件的数据,如果父组件中数据是一个对象这样改不算

    我们经常会说不能在子组件里面直接修改父组件的数据,但是这里如果父组件是一个对象的数据,那么改变对象的属性值这样是不...

  • react学2-父子组件通信

    react单项数据流动 父组件可以传递数据给子组件 但是这样如果想在父组件修改name的属相值,子组件也同步修改。...

  • 组件之间如何通信

    父组件传递数据给子组件 可以通过props属性来实现 父组件: 子组件 子组件向父组件通信 如果子组件想要改变数据...

  • vue2.0子组件能不能修改父组件传递过来的数据

    父组件传弟子组件是单向数据绑定; 子组件不能直接修改父组件的数据,可以间接修改数据 1:子组件通过computed...

  • Vue 的单项数据流

    数据总是从父组件传到子组件,子组件没有权利修改父组件传过来的数据,只能请求父组件对原始数据进行修改。这样会防止从子...

  • Vue自定义组件的v-model的双向绑定

    父组件 子组件 test-model 这样无论在父组件改fData或是子组件内改sData 都实现了数据统一。

  • vue子父组件通信

    子父组件传递数据 父组件===》子组件。父组件通过props向子组件中传递数据和改变数据的函数,通过在子组件中调用...

  • 组件

    1. 父传子 Vue实例可以看做是一个父组件,如果想要把父组件的数据传给子组件,可以在子组件中用props接受父组...

  • vue组件之间数据通信操作

    父组件通知子组件父组件向子组件传递数据可以通过propsprops 可以是数组或对象,用于接收来自父组件的数据。p...

  • 弹窗设置(父子传参原理)

    父组件: 1.父组件向子组件传递数据父组件绑定属性,给子组件传递数据子组件通过props接收父组件传递过来的数据子...

网友评论

      本文标题:子组件想要修改父组件的数据,如果父组件中数据是一个对象这样改不算

      本文链接:https://www.haomeiwen.com/subject/fnfixltx.html