Vue 组件通信 - 子传父

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 组件通信 - 子传父

目录

子传父

场景

应用

传参数给父

总结


子传父

场景

在组件中点击按钮,改变全局变量,而后控制其他组件。

应用

父向子组件上增加了监听事件,来通过子组件操作触发父组件事件。

示例如下:

<script src="../lib/vue.js"></script>
<div id="box">
  <navbar @myevent="handleEvent"></navbar>
  <sidebar v-show="isShow"></sidebar>
</div>
<script>
  // 定义一个全局组件
  Vue.component("navbar", {
    template: `<div style="background-color: red">
            <button @click="handleClick()">点击</button>-导航栏
        </div>`,
    methods: {
      handleClick() {
        console.log("子传父,告诉父组件,取反isShow")
        this.$emit("myevent")
      }
    }
  })

  Vue.component("sidebar", {
    template:`<div style="background-color: yellow">
    <ul>
    <li>第一行</li>
    <li>第二行</li>
    <li>第三行</li>
</ul>
</div>`
  })
  let vm = new Vue({
    el:"#box",
    data:{
      isShow: true
    },
    methods: {
      handleEvent() {
        console.log("触发父组件定义的事件")
        this.isShow = !this.isShow
      }
    }
  })
</script>

效果:

实现点击后 列表的显示和隐藏

传参数给父

还是通过子组件触发父组件事件,这次增加了参数。

示例如下:

// 定义一个全局组件
Vue.component("navbar", {
  template: `<div style="background-color: red">
          <button @click="handleClick()">点击</button>-导航栏
      </div>`,
  methods: {
    handleClick() {
      console.log("子传父,告诉父组件,触发事件")
      this.$emit("myevent", 10000)
    }
  }
})

 父组件接收传参,示例如下:

let vm = new Vue({
  el:"#box",
  data:{
    isShow: true
  },
  methods: {
    handleEvent(state) {
      console.log("触发父组件定义的事件,接收参数", state)
      this.isShow = !this.isShow
    }
  }
})

效果:

总结

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 组件通信 - 子传父

猜你喜欢

转载自blog.csdn.net/json_ligege/article/details/146149108