zoukankan      html  css  js  c++  java
  • vue-$emit

    <!DOCTYPE html>
    <html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title></title>
        <script src="https://labfile.oss.aliyuncs.com/courses/1262/vue.min.js"></script>
    </head>

    <body>
        <div id="app">
            <!-- 这个父组件不会渲染驼峰的 -->
            <title-component postTitle="syl1"></title-component>
            <title-component post-title="syl2"></title-component>

            <!-- 父组件传子组件用[props] -->
            <p>{{data1}}</p>
            <child1 :data1='data1'></child1>

            <!-- 子组件传给父组件 -->
            <child2 :data1='data1' @handle='listenChild'></child2>

            <!-- 兄弟级组件数据相互交互 -->
              <brother1></brother1>  
              <brother2></brother2>  
              <!-- 在父组件中进行公共事件的销毁 -->
              <button @click='handle'>点击销毁</button>
         
        </div>
        <script>
            //注册一个 title组件,通过传入不同的title值,渲染不同的东西
            //组件上 传递的 props 属性名为 kebab-case(短横线分隔命名)的要转换为驼峰命名
            Vue.component('title-component',{
                props:['postTitle'],//post-title 转换为驼峰命名
                template:'<p>{{postTitle}}</p>'
            })
            //声明一个子组件
            var  child1 = {
                props:['data1'],
                template:`<button>点击</button>`,
                methods:{
                    handle:function(){
                       this.data1='gaibian'
                    }
                }
            }
            //声明第二个子组件
            var  child2 = {
                props:['data1'],
                template:`<button @click='handle'>点击2</button>`,
                methods:{
                    handle:function(){
                       var a ='gaibian';
                       this.$emit('handle',a)
                    }
                }
            }

            //提供事件中心
            var hub = new Vue()
            //声明一组平级的组件
            Vue.component('brother1', {
                data:function (){
                    return {
                        num:0
                    }
                },
                template:`<div>
                    <p>b1:{{num}}</p>
                    <button @click='handle'>b1</button>
            </div>`,
            methods:{
                'handle':function(){
                    hub.$emit('b2',1)
                }
            },
            mounted:function(){
                hub.$on("b1",(val)=>{
                    this.num+=val
               })
            }

            })
            Vue.component('brother2', {
                data:function (){
                    return {
                        num:0
                    }
                },
                template:`<div>
                    <p>b2:{{num}}</p>
                    <button @click='handle'>b2</button>
            </div>`,
            methods:{
                'handle':function(){
                    hub.$emit('b1',5)
                }
            },
            mounted:function(){
               // 监听事件
               hub.$on("b2",(val)=>{
                    this.num+=val
               })
            }

            })
            

            var app = new Vue({
                el: '#app',
                data:{
                    data1:'父组件的数据',
                },
                components:{
                    "child1":child1,
                    "child2":child2
                },
                methods:{
                    listenChild:function(val){
                        this.data1 += val
                    },
                    handle:function(){
                        hub.$off('b1')
                        hub.$off('b2')
                    }
                }
            })
        </script>
    </body>

    </html>
  • 相关阅读:
    java web
    java web
    java
    周末总结7
    java
    java
    java
    java
    java web
    java
  • 原文地址:https://www.cnblogs.com/x-yy/p/13099764.html
Copyright © 2011-2022 走看看