美文网首页
16 Vue- bus通信

16 Vue- bus通信

作者: 滔滔逐浪 | 来源:发表于2021-08-03 22:34 被阅读0次
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="../../lib/vue.js"></script>
        <script src="../../lib/axios.js"></script>
    </head>
    <body>
        <div id="app">
            <child1></child1>
            <child2></child2>
        </div>

<script>
    var bus=new Vue();//空的Vue
    
    //bus.$on bus.$emit
    
    Vue.component("child1",{
        template:`
        
        <div>child1-<button @click="handleclick()">详细信息</button></div>
        `,
        methods:{
            handleclick(){
                //发布
                bus.$emit("kerwin","你会受到");
                
            }
        }
        
    }),
    Vue.component("child2",{
        template:`
        
        <div>child2--订阅者</div>
        `,
        mounted(){
            console.log("mounted-生命周期--dom创建完后会触发");
            //订阅
            bus.$on("kerwin",(data)=>{
                console.log("订阅者child2--",data);
                
                
            })
        }
        
    })
    //中央事件总线
    new Vue({
        el:"#app",
        data:{
            
            
        }
        
    });
</script>
    </body>
</html>





<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script src="../../lib/vue.js"></script>
        <script src="../../lib/axios.js"></script>
    </head>
    <style>
        .item {
            overflow: hidden;
            padding: 10px;
            width: 400px;
            border: 1px solid red;
        }

        .item img {
            width: 100px;
            float: left;

        }

        .film {
            border: 1px solid black;
            height: 1500px;
        }

        .filminfo {
            width: 300px;
            min-height: 200px;
            background: yellow;
            position: fixed;
            right: 50px;
            top: 100px;
            border: 1px solid blue;
        }
    </style>
    <body>
        <div id="app">
            <button @click="handleAjax">ajax </button>
            <film-item v-for="data in datalist" :key="data.filmId" :item="data" ></film-item>

              <film-detail ></film-detail>

        </div>

        <script>
            var bus=new Vue();//空的Vue
            Vue.component("filmDetail",{
                template:`
                <div class="filminfo">
                {{info}}
                </div>
                
                `,
                mounted(){
                    console.log("mounted-生命周期--dom创建完后会触发");
                    //订阅
                    bus.$on("kerwin",(data)=>{
                        console.log("订阅者child2--",data);
                        this.info=data;
                        
                    })
                },
                data(){
                    return {
                        info:""
                    }
                }
                
            }),
            
            Vue.component("filmItem", {
                props: ["item"],
                template: `
          <div class="item">      <img :src="item.poster">{{item.name}}
     <button @click="handliclick()">详情</button>
          </div>
        
        `,
                methods: {
                    handliclick(data) {
                    
                        bus.$emit("kerwin",this.item.synopsis)
                    }
                }

            })


            new Vue({
                el: "#app",
                data: {
                    datalist: [],
                    info:""

                },
                methods: {
                    //http://192.168.0.105/wj1/2021/vue/vue2/html/04%E7%BB%84%E4%BB%B6/%E4%B8%AD%E9%97%B4%E4%BA%BA%E6%A8%A1%E5%BC%8F.html
                    handleAjax() {
                        axios.get("http://192.168.0.105/wj1/2021/vue/vue2/html/04%E7%BB%84%E4%BB%B6/test.json")
                            .then(res => {
                                this.datalist = res.data.data.films

                            })



                    },
                    
                }

            });
        </script>
    </body>
</html>

相关文章

  • 16 Vue- bus通信

  • bus on通信

    转载参考自:https://blog.csdn.net/adley_app/article/details/847...

  • Vue父传子、子传夫通信--小案例

    父传子 子传夫 如有不懂,可以看我的 Vue-组件通信

  • 2022-01-21

    一、 D-Bus简介 D-Bus是一种高效、易用的进程间通信方式.D-Bus分为两种:system bus(系统总...

  • DBUS基础知识

    进程间使用D-Bus通信 D-Bus是一种高级的进程间通信机制,它由freedesktop.org项目提供,使用G...

  • Vue兄弟组件之间传值

    可以用过一个vue实例Bus作为媒介,要相互通信的兄弟组件之中,都引入Bus,之后通过分别调用Bus事件触发on来...

  • Vue兄弟组件之间传值

    可以用过一个vue实例Bus作为媒介,要相互通信的兄弟组件之中,都引入Bus,之后通过分别调用Bus事件触发$em...

  • vue兄弟间传值

    可以用过一个vue实例Bus作为媒介,要相互通信的兄弟组件之中,都引入Bus,之后通过分别调用Bus事件触发$em...

  • VUE-组件通信

    组件通信各种情况总结VUE是以数据驱动的MVVM框架,又是模块化开发,所以各个组件间的通信传递数据非常重要,在项目...

  • vue-组件通信

    一、组件通信(props) 1、说明 通过上一小节的学习我们已经知道了在Vue中怎么创建组件和使用组件,而组件与组...

网友评论

      本文标题:16 Vue- bus通信

      本文链接:https://www.haomeiwen.com/subject/jwqyvltx.html