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>
  • 相关阅读:
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    64位WIN7系统 下 搭建Android开发环境
    在eclipse里 新建android项目时 提示找不到proguard.cfg
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    This Android SDK requires Android Developer Toolkit version 20.0.0 or above
    Android requires compiler compliance level 5.0 or 6.0. Found '1.4' instead
    Windows XP下 Android开发环境 搭建
    Android程序的入口点
  • 原文地址:https://www.cnblogs.com/itwatcher/p/8467299.html
Copyright © 2011-2022 走看看