zoukankan      html  css  js  c++  java
  • vue--综合组件间的通信

    二、综合组件之间的通信

    实现一个ToDoList。

    ①完成所有的组件的创建和使用

    ②add
    点击add按钮时候,将用户输入的内容(todoinput),显示在(todolist)

    核心代码:兄弟组件间通信
    步骤1:var bus = new Vue()
    步骤2:在准备接受数据的组件
    bus.$on('addEvent',function(){

    })
    步骤3:触发事件
    bus.$emit('addEvent',123)


    将todolist中数组的元素 渲染在todoitem的每一个span标签。(父子组件通信)

    ③delete

    在todoitem中点击delete按钮时,将该todoitem删除,由于todoitem的数量 取决于 todolist中数组

    子组件 和 父组件通信、

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="js/vue.js"></script>
        <script src="js/vue-resource.js"></script>
    </head>
    <body>
    <div id="container">
        <p>{{msg}}</p>
        <todobox></todobox>
    </div>
    <script>
        <!--兄弟间通信-->
        var bus = new Vue();
    //    input组件
        Vue.component("todoinput",{
    //        保存用户输入的数据
            data:function(){
                return{
                    userInput:""
                }
            },
            methods:{
                sendInput:function(){
    //                触发自定义事件,将this.userInput这个传递到todolist
                    bus.$emit("addEvent",this.userInput);
                    this.userInput = "";
                }
            },
            template: `
                <div>
                    <h1>待做事项</h1>
                    <input type="text" placeholder="健身" v-model="userInput"/>
                    <button @click="sendInput">Add</button>
                </div>
    
                 `
        })
    //    列表组件
        Vue.component("todolist",{
    //        保存传递来的用户输入的数据
            data:function(){
                return{
                    inputList:[]
                }
            },
            beforeMount:function(){
    //            触发绑定
    //            msg就是事件触发后传递过来的数据
                //var that = this;
                bus.$on("addEvent",(msg)=>{
    //                保存到数组inputList中
                    this.inputList.push (msg) ;
                })
            },
            template: `
            <div>
                <ul>
                   <todoitem v-bind:content="tmp" v-for="(tmp,index) in inputList" v-bind:key="index" v-bind:myIndex="index"></todoitem>
                </ul>
            </div>
                 `
    //        出现警告,加下标,提高列表渲染
        })
    //    item组件
        Vue.component("todoitem",{
    //        props子组件获取父组件的数据,将todolist中的内容以及内容的下标获取
            props:["content","myIndex"],
            methods:{
    //            通过下标删除
                deleteList:function(){
                    this.$parent.inputList.splice(this.myIndex,1);
                }
            },
            template: `
            <div>
                <li>
                    <button @click="deleteList">delete</button>
                     <span>{{content}}</span>
                </li>
            </div>
                 `
        })
    //根组件
        Vue.component("todobox",{
            template:`
                <div>
                    <todoinput></todoinput>
                    <todolist></todolist>
                </div>
            `
        })
        new Vue({
            el: "#container",
            data: {
                msg: "Hello Vue"
            }
        })
    </script>
    </body>
    </html>
  • 相关阅读:
    微软 软件的 一组堆成快捷键
    C#事件 的讲解
    软件缺陷分析的几种方法
    一个长三角人对深圳的看法 (转)
    一次LoadRunner的CPC考试经历
    测试是一门武功
    ORACLE的性能测试经验总结
    深圳测试协会第九次论坛在深圳举行
    10月28日参加了IBM的产品推介会
    什么是web安全性测试?
  • 原文地址:https://www.cnblogs.com/wangruifang/p/7779419.html
Copyright © 2011-2022 走看看