欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Vue父子,子父,非父子组件之间传值

程序员文章站 2022-07-09 21:20:05
Vue组件基础 纯属随笔记录,具体详细教程,请查阅vue.js网站 子组件给父组件传值: 父组件给子组件传值: 非父子组件间传值: ` ......

vue组件基础

  • 纯属随笔记录,具体详细教程,请查阅vue.js网站

子组件给父组件传值:

<body>
    <div id="app">
        <my-app></my-app>
    </div>
</body>

<template id="apptem">
    <div>我是---{{ msg }}
        <my-banner @lalala='getdata'></my-banner>
    </div>

</template>

<template id="bannertem">
    <div>我是---

        <button @click='setdata'>这里是轮播图banner</button>
    </div>
</template>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    //定义一个组件
    const banner = {
        template: '#bannertem',
        methods: {
            setdata() {
                this.$emit('lalala', '我是子组件my-banne的值')

            }
        },
    }

//定义一个组件
    const app = {
        template: '#apptem',  //提取组件中的模板
        data() {  //组件的data是一个函数,返回的是一个对象
            return {
                msg: '头部组件',
                a: 212
            }
        },
        components: {
            'my-banner': banner,
        },
        methods: {
            getdata(str) {
                console.log(str);

            }
        }
    }

    const app = new vue({
        el: '#app',
        // data:{

        // },
        components: {
            'my-app': app
        }
    })
</script>

父组件给子组件传值:

<body>
    <div id="app">
        <my-heade></my-heade>
    </div>
</body>
<template id="headetm">
    <div>
        我是heade组件
        <my-banner :bar='msg'></my-banner>
    </div>
</template>

<template id="bannertm">
    <div>
        我是banner组件
        {{ bar }}
    </div>
</template>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    //定义一个banner组件
    const banner = {
        template: '#bannertm',
        props: {
            bar: {
                type: string
            }
        }
    }

    //定义一个heade组件
    const heade = {
        template: '#headetm',
        components: {
            'my-banner': banner
        },
        data() {
            return {
                msg: '我是父组件的值'
            }
        }
    }
    const app = new vue({

        el: '#app',
        components: {
            'my-heade': heade
        }

    })
</script>

非父子组件间传值:

<body>
    <div id="app">
           <my-app></my-app>
    </div>
</body>
<template id="apptm">
    <div>我是最外面的app

        <my-banner></my-banner>
        <my-bannerindex></my-bannerindex>
    </div>
</template>

<template id="bannertm">
        <div>
            这里是banner
            <button @click='getindex(1)'>1</button>
            <button @click='getindex(2)'>2</button>
            <button @click='getindex(3)'>3</button>
            <button @click='getindex(4)'>4</button>
        </div>
    </template>


<template id="barindextm">
    <div>
        {{ index }}
    </div>
</template>

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>

<script>
   
    //*事件总线,也就是实例化一个vue
    const bus=new vue();

   const barindex={
    template:'#barindextm',
    data(){
        return{
           index:''
        }
    },
    mounted() {
        // 2、监听事件
        that=this;
        bus.$on('changeindex',function(index){//(index)=>{this.index=index}
            // console.log(index);
            
            that.index=index;
           
         })
    },
    }

    const banner={
    template:'#bannertm',
    methods: {
        getindex(value){
            bus.$emit('changeindex',value)
        }
    },

}



   const app={
       template:'#apptm',
       components:{
           'my-banner':banner,
           'my-bannerindex':barindex
       }
   }
   
   const app =new vue({
         el:'#app',
         components:{
             'my-app':app
         }
    })

</script>