父子祖孙组件通信

  1. 可以使用vue serve和vue build命令对单个*.vue文件进行快速原型开发,但需要安装一个全局的扩展:
    npm install -g @vue/cli-service-global
  2. 支持.vue后缀文件(快速原型开发)
    开发环境下:vue serve App.vue
    生产环境下:vue build App.vue
  3. 组件的通信
    入口文件:
<template>
    <div>
        <Parent></Parent>
    </div>
</template>
<style scoped>

</style>
<script>
import Parent from './components/Parent';
    export default{
        data(){
            return {

            }
        },
        components:{
            Parent
        }
    }
</script>

components文件夹中建了三个vue 文件:Parent.vue
Son.vue、grandSon.vue
(1)父子通信 props $emit
Parent.vue:

<template>
    <div>
        parent
        <!-- 父组件监听子组件的事件,并给事件绑定函数 -->
        <Son :m="money" @change="fn"></Son>
    </div>
</template>
<script>
import Son from './Son';
    export default{
        data(){
            return {
                // money:"ABC"
                money:500
            }
        },
        components:{
            Son
        },
        methods:{
            fn(data){
                this.money=data;
            }
        }
    }
</script>

Son.vue:

<template>
    <div>
        son
        {{m}}
        {{a}}
        {{o}}
        <button @click="give">给父组件</button>
        <!-- {{changeM}} -->
    </div>
</template>
<script>
    export default{
        props:{
            m:{
                type:[String,Number],
                required:true,
                validator:(value)=>{ //自定义验证规则
                    return value>400&value<2000
                }
            },
            //数组或者对象默认值是函数
            a:{
                type:Array,
                default:()=>[1]
            },
            o:{
                type:Object,
                default:()=>({})
            }
        },
        methods:{
            give(){
                //子组件执行父组件监听的事件
                this.$emit('change',1000);
            }
        }
        // props:['m'],
        // computed:{
        //    changeM(){
        //        return this.m.trim().toLowerCase()
        //    }
        // }
    }
</script>

(2)语法糖的写法:
Parent.vue
在这里插入图片描述
Son.vue
在这里插入图片描述
(3)v-model
Parent.vue

Son.vue
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  1. 父组件批量传给子组件:$attrs——>如果继续向下传的话使用v-bind,子组件不需要使用props.
    在这里插入图片描述
    而子组件直接接收即可。
    在这里插入图片描述
    运行的结果以对象的形式展现:
    在这里插入图片描述

传给grandson:
Son.vue:
在这里插入图片描述
引入:
在这里插入图片描述
注册组件:
在这里插入图片描述

GrandSon.vue:
在这里插入图片描述
运行的结果如下:
在这里插入图片描述

  1. 传递事件,使用$listeners,继续向下传时使用v-on
    在这里插入图片描述
    Son.vue
    在这里插入图片描述
    传给grandson时,
    Son.vue如下:
    在这里插入图片描述
    grandson中:
    在这里插入图片描述
  2. provide & inject
    Parent.vue:
    在这里插入图片描述
    grandson中
    在这里插入图片描述
  3. $parent & $children
    拿到父子组件的方法:
    在这里插入图片描述

(2)或者使用ref
在这里插入图片描述
在这里插入图片描述

  1. eventBus 兄弟之间传递数据 $on $emit
Vue.prototype.$bus=new Vue;
this.$bus.$on('test',function(data){console.log(data)});
this.$bus.$emit('test',1000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值