zoukankan      html  css  js  c++  java
  • vue父子元素数据传递

    1.子元素接收数据,无校验

    <div id="app">
        父亲给予:{{money}}
        <!--当前组件的属性=父级的值,给子元素加了一个childmoney属性,属性对应的数据时属于父亲的-->
        <child :childmoney="money"></child>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //如果要在一个组件使用另一个组件,先保证使用的组件必须真实存在,在需要引用这个组件的实例上通过components注册这个组件,组件需要在父级的模板中通过标签的形式引用
    
    
        let vm=new Vue({
            el:'#app',
            data:{
                money:200
            },
            components:{
                child:{
                    props:['childmoney'],//如用数组,相当于this.childmoney=200,会在当前组件上声明一个childmoney属性,值是父元素的
                    templates:'<div>儿子接收 {{childmoney}} </div> '
                }
            }
        });
    </script>

    2.子元素接收数据,有校验

    <div id="app">
        父亲给予:{{money}}
        <!--当前组件的属性=父级的值,给子元素加了一个childmoney属性,属性对应的数据时属于父亲的-->
        <child :childmoney="money"></child> <--校验属性类型,如不带':'得到的是字符串类型,如带':',如 :childmoney='xxx',则在script中校验其类型
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //如果要在一个组件使用另一个组件,先保证使用的组件必须真实存在,在需要引用这个组件的实例上通过components注册这个组件,组件需要在父级的模板中通过标签的形式引用
    
    
        let vm=new Vue({
            el:'#app',
            data:{
                money:200
            },
            components:{
                child:{
                    props:{
                        childmoney:{ //属性名和data中的名字不能相同,校验时不能阻断代码的指向,只能警告而已。
                            type:[String, Function, Number, Object]//把childmoney定义为对象,并指定校验类型
                   //default:0 //可以给childmoney赋予默认值,如果不传会调用默认值。
                   required:true //此属性强制childmoney必须传递,但不能与default同时使用

                   validator(val){ //自定义校验器,第一个参数为当前传递的值,返回true表示通过
                    return val>300;
                    }
    } }, template:'<div>儿子接收: {{childmoney}} </div> ' } } }); </script>

     3.子元素向父元素传递数据:父元素先绑定事件,子元素触发这个事件,将参数传递过去(单向数据流,即父级数据刷新,可导致子元素数据刷新,子元素需要改数据,需先通知父级修改后刷新获取。)

    <div id="app">
        父亲给予:{{money}}
        <!--当前组件的属性=父级的值,给子元素加了一个childmoney属性,属性对应的数据时属于父亲的-->
        <child :childmoney="money" @child-msg="changeMoney"></child>
    </div>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        //如果要在一个组件使用另一个组件,先保证使用的组件必须真实存在,在需要引用这个组件的实例上通过components注册这个组件,组件需要在父级的模板中通过标签的形式引用
    
    
        let vm=new Vue({
            el:'#app',
            data:{
                money:200
            },
            methods:{
              changeMoney(val){
                  this.money=val;
              }
            },
            components:{
                child:{
                    props:{
                        childmoney:{
                            type:[String, Function, Number, Object]
                        }
                    },
                    template:'<div>儿子接收: {{childmoney}} <button @click="getMoney()" >再给点吧</button> </div> ',
                    methods:{
                        getMoney(){
                            this.$emit('child-msg', 800); //触发自己的自定义事件,让父元素的方法执行。
                        }
                    }
                }
            }
        });
    </script>
  • 相关阅读:
    [Swift]LeetCode1190. 反转每对括号间的子串 | Reverse Substrings Between Each Pair of Parentheses
    [Swift]LeetCode1191. K 次串联后最大子数组之和 | K-Concatenation Maximum Sum
    [Swift]LeetCode1192. 查找集群内的「关键连接」| Critical Connections in a Network
    Java:对double值进行四舍五入,保留两位小数的几种方法
    豌豆荚不能连接三星S4手机,提示打开手机的“USB调试模式”,但却找不到在哪儿可以设置
    Windows中将javac和java两个命令集成到UltraEdit工具栏
    Angularjs在线api文档
    Bootstrap3网上api文档地址
    jQuery如何创建元素
    CSS强制性换行
  • 原文地址:https://www.cnblogs.com/itwatcher/p/8467299.html
Copyright © 2011-2022 走看看