zoukankan      html  css  js  c++  java
  • vue单向数据流

    单向数据流

    Prop 是单向绑定的:当父组件的属性变化时,将传递给子组件,但是反过来不会。这是为了防止子组件无意间修改了父组件的状态,来避免应用的数据流变得难以理解。

    另外,每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着你不应该在子组件内部改变 prop。如果你这么做了,Vue 会在控制台给出警告。

    注意在 JavaScript 中对象和数组是引用类型,指向同一个内存空间,如果 prop 是一个对象或数组,在子组件内部改变它会影响父组件的状态。 message:{val:""}

    <body>
        <div id="app">
            <father></father>
        </div>
        <template id="father">
            <div>
                <input type="text" v-model="msg.value">
                <hr>
                <son :msg="msg"></son>
            </div>
        </template>
        <template id="son">
            <div>
                <input type="text" v-model="msg.value">
            </div>
        </template>
    </body>
    <script>
        Vue.component("father",{
            template:"#father",
            data(){
                return {
                    msg:{ //父组件可以将msg这个地址引用传递子组件,此时,子组件修改数据,父组件也跟着修改
                        value:"father"
                    }
                }
            },
            components:{
                son:{
                    props:["msg"],
                    template:"#son"
                }
            }
        })
        new Vue({
            el:"#app"
        })
    </script>

    组件间的数据调用

    组件、实例对象上有这样的属性:$parent,$children,$root,

    这样的话,就形成了viewmodel链(关系链),

    理论上来说,任何两个组件之间的数据都可以互相调用,获取

    缺点:如果组件很多的话,写出来的代码会很乱

    <body>
        <div id="app">
            <aaa></aaa>
        </div>
        <!--创建组件a-->
        <template id="aaa">
            <div>
                <p>这是A组件...</p>
                <input type="text" v-model="msg">
                <hr>
                <bbb :msg="msg"></bbb>  
            </div>
        </template>
          <!--创建组件b-->
        <template id="bbb">
            <div>
                <input type="text" v-model="ownMsg">
            </div>
        </template>
    </body>
    
    <script>
        Vue.component("aaa",{
            template:"#aaa",
            data(){
                return {
                    msg:"hello"
                }
            }
        })
        Vue.component("bbb",{
            template:"#bbb",
            props:["msg"],
            computed:{
                ownMsg:{
                    get(){
                        return this.msg
                    },
                    set(val){
                        //希望父组件aaa的msg变成val
                        // this.msg = val
                        this.$parent.msg = val   
                    }
                }
            }
        })
        var vm = new Vue({
            el:"#app"
        })
    </script>

    v-model 可以用在组件通信?

    可以的。在组件上面使用v-model指令,相当于绑定了value属性与监听input事件。

    请用今天的努力,让明天没有遗憾。
  • 相关阅读:
    Worker Threads in C#
    Opera和各种下载工具的右键整合
    两种不用的电动车刹车装置价格竟差了一倍
    SQL Server中CONVERT  将日期格式化
    javascript获得当前文档的相对路径
    arcgis sever9.3 for flex API
    常用ArcGIS Server for java网址
    点线面查询闪烁
    arcmap 中建鹰眼
    将一个包含有exe运行文件的文件夹压缩成exe文件
  • 原文地址:https://www.cnblogs.com/cupid10/p/15617699.html
Copyright © 2011-2022 走看看