• 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事件。

    请用今天的努力,让明天没有遗憾。
  • 相关阅读:
    一个万能的工具包下载网站
    Keras框架简介
    发现了一个非常棒的pyqt5的例子集
    人脸识别常用数据集大全(12/20更新)
    用 opencv和numpy进行图片和字符串互转,并保存至 json
    机器学习中的范数规则化-L0,L1和L2范式(转载)
    利用face_recognition库裁取人脸
    一招解决C盘空间不足,再也不怕硬盘爆满!
    【LeetCode】394.字符串解码(辅助栈、递归、详细图解)
    程序员那些事儿:女婿程序员
  • 原文地址:https://www.cnblogs.com/cupid10/p/15617699.html
Copyright © 2020-2023  润新知