Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>非父子组件间传值 Bus/总线/发布订阅模式/观察者模式)</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.3/vue.js"></script>
</head>
<body>
  <div id="app">
    <child content="even"></child>
    <child content="yao"></child>
  </div>
  <script>
    // new 一个 Vue 的实例,将其赋值给 Vue.prototype.bus
    Vue.prototype.bus = new Vue()
    Vue.component('child',{
      data: function(){
        return {
          //因为不能改变传递过来的值 所以复制一份
          selfContent: this.content
        }
      },
      props: {
        content: String
      },
      template: '<div @click="handleClick">{{selfContent}}</div>',
      methods: {
        handleClick: function(){
          //实例上挂载的bus,通过 $emit 方法向外触发事件
          this.bus.$emit('change',this.selfContent)
        }
      },
      //借助生命周期钩子 通过 $on 方法 监听 change 事件
      mounted: function(){
        var _this = this
        this.bus.$on('change',function(msg){
          _this.selfContent = msg
        })
      }
    })
    var vm = new Vue({
      el: "#app"
    })
  </script>
</body>
</html>
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
evenyaopro
0viewers