• vue非父子组件间通信


    有时候非父子关系的组件也需要通信。在简单的场景下,使用一个空的Vue实例作为中央事件总线:

    有时候非父子关系的组件也需要通信。在简单的场景下,使用一个空的 Vue 实例作为中央事件总线:

    var bus = new Vue()
    // 触发组件 A 中的事件
    bus.$emit('id-selected', 1)
    // 在组件 B 创建的钩子中监听事件
    bus.$on('id-selected', function (id) {
    // ...
    })

    在更多复杂的情况下,你应该考虑使用专门的 状态管理模式.就是用到了vuex

    eventBus是作为兄弟关系的组件之间的通讯中介。

    代码示例:

    <!DOCTYPE html>
    <html>
    <head>
    <title>eventBus</title>
    <script src="http://cdn.jsdelivr.NET/vue/1.0.28/vue.min.js"></script>
    </head>
    <body>
    <div id="todo-app">
    <h1>todo app</h1>
    <new-todo></new-todo>
    <todo-list></todo-list>
    </div>
    <script>
    var eventHub = new Vue( {
    data(){
    return{
      todos:['A','B','C']
    }
    },
    created:function () {
      this.$on('add', this.addTodo)
      this.$on('delete', this.deleteTodo)
    },
    beforeDestroy:function () {
      this.$off('add', this.addTodo)
      this.$off('delete', this.deleteTodo)
    },
    methods: {
      addTodo: function (newTodo) {
        this.todos.push(newTodo)
      },
      deleteTodo: function (i) {
        this.todos.splice(i,1)
      }
    }
    })
    var newTodo = {
    template:`<div><input type="text" autofocus v-model="newtodo"/><button @click="add">add</button></div>`,
    data(){
      return{
        newtodo:''
      }
    },
    methods:{
      add:function(){
        eventHub.$emit('add', this.newtodo)
        this.newtodo = ''
      }
    }
    }
    var todoList = {
      template:`<ul><li v-for="(index,item) in items">{{item}}
                <button @click="rm(index)">X</button></li>
                </ul>`,
          data(){
                return{
                  items:eventHub.todos
                }
          },
           methods:{
                rm:function(i){
                  eventHub.$emit('delete',i)
                }
           }
    }
    var app= new Vue({
      el:'#todo-app',
      components:{
        newTodo:newTodo,
        todoList:todoList
      }
    })
    </script>
    </body>
    </html>

    效果图如下:

  • 相关阅读:
    C/C++程序员必备的15个编辑器和集成开发环境
    天猫浏览型应用的CDN静态化架构演变
    实用技巧:如何用 CSS 做到完全垂直居中
    JavaScript 字符串操作:substring, substr, slice
    Hybrid App 开发初探:使用 WebView 装载页面
    引领潮流!最顶尖的24个获奖网页作品
    HTML5编程之旅系列一:HTML5 Geolocation 初探
    JavaScript 秘密花园——对象的使用和属性操作
    提高效率!15款最好的 Bug 跟踪应用程序
    最常用的8款 PHP 调试工具,你用过吗?
  • 原文地址:https://www.cnblogs.com/cina33blogs/p/6769523.html
Copyright © 2020-2023  润新知