zoukankan      html  css  js  c++  java
  • vuejs2.0子组件改变父组件的数据

    在vue2.0之后的版本中,不允许子组件直接改变父组件的数据,在1.0的版本中可以这样操作的,但是往往项目需求需要改变父组件的数据,2.0也是可一个,区别是,当我们把父元素的数据给子组件时,需要传一个对象,子组件通过访问对象中的属性操作数据,下面是演示

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script type="text/javascript" src="vue.js"></script>    
        <script type="text/javascript">
            window.onload = function(){
                var app = new Vue({
                el:'#box',
                data:{
                    myData:{
                        info:'父组件信息'
                    }
                },
                components:{
                    'v-com':{
                        props:['data'],
                        template:'#tpl',
                        methods:{
                            change(){
                                this.data.info = 'change info'
                            }
                        }
                    }
                }
            })
            }
        </script>
    </head>
    <body>
        <!-- 子组件改变父组件的数据 -->
        <div id="box">
            <div>
                <p>{{myData.info}}</p>
                <v-com :data ="myData"></v-com>
            </div>
        </div>
    
        <!-- 模板 -->
        <template id="tpl">
            <div>
                <button @click="change">change</button>
                <p>{{data.info}}</p>
            </div>
        </template>
    
    </body>
    </html>

     这种是同步改变数据,就是说子组件的数据改变,父组件数据也跟着改变,下面展示非同步的情况

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script type="text/javascript" src="vue.js"></script>    
        <script type="text/javascript">
            window.onload = function(){
                var app = new Vue({
                el:'#box',
                data:{
                    myData:'父组件信息'
                },
                components:{
                    'v-com':{
                        data() {
                            return {
                                childData:''
                            }
                        },
                        props:['data'],
                        // dom渲染完毕
                        mounted(){
                            this.childData = this.data
                        },
                        template:'#tpl',
                        methods:{
                            change(){
                                this.childData = 'change info'
                            }
                        }
                    }
                }
            })
            }
        </script>
    </head>
    <body>
        <!-- 子组件改变父组件的数据,不同步 -->
        <div id="box">
            <div>
                <p>{{myData}}</p>
                <v-com :data ="myData"></v-com>
            </div>
        </div>
    
        <!-- 模板 -->
        <template id="tpl">
            <div>
                <button @click="change">change</button>
                <p>{{childData}}</p>
            </div>
        </template>
    
    </body>
    </html>

    这里巧妙的通过mounted这个方法进行了中转,实现了想要的效果

  • 相关阅读:
    Oracle入门第六天(下)——高级子查询
    Oracle入门第六天(中)——SET运算符(交并差集)
    Oracle入门第六天(上)——用户控制
    数据库理论——数据库3范式
    Oracle入门第五天(下)——数据库其他对象
    Oracle入门第五天(上)——数据库对象之视图
    PHP PDO函数库详解
    python访问纯真IP数据库的代码
    有关linux磁盘分区优化
    Nginx日志深入详解
  • 原文地址:https://www.cnblogs.com/yesyes/p/6629448.html
Copyright © 2011-2022 走看看