总结vue中组件相互传值的几种方式

Posted hesj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了总结vue中组件相互传值的几种方式相关的知识,希望对你有一定的参考价值。

子向父方式1:通过props,如例子中子组件test1.vue向父组件App.vue传值

  App.vue代码

<template>
  <div id="app">
    <test1 :parfn="parfn"></test1>
  </div>
</template>

<script>
import test1 from @/components/test1.vue
export default {
  name: App,
  data () {
    return {
      msg: parent
    }
  },
  components: {test1},
  methods: {
    parfn: function (a) {
      alert(a)
    }
  }
}
</script>

  test1.vue代码

<template>
    <div>i am test1</div>
</template>

<script>
export default {
  data () {
    return {
      msg: test1
    }
  },
  props: {
    parfn: {
      type: Function
    }
  },
  created: function () {
    this.parfn(this.msg)
  }
}
</script>

效果图

技术图片

 

子向父方式2:通过$parent

  App.vue代码:  

<template>
  <div id="app">
    <test1></test1>
  </div>
</template>

<script>
import test1 from @/components/test1.vue
export default {
  name: App,
  data () {
    return {
      msg: parent
    }
  },
  components: {test1},
  methods: {
    parfn: function (a) {
      alert(a)
    }
  }
}
</script>

  test1.vue代码: 

<template>
    <div>i am test1</div>
</template>

<script>
export default {
  data () {
    return {
      msg: test1
    }
  },
  created: function () {
    this.$parent.parfn(this.msg)
  }
}
</script>

效果图:

技术图片

子向父方式3:通过emit

  App.vue代码

<template>
  <div id="app">
    <test1 @myfn="parfn"></test1>
  </div>
</template>

<script>
import test1 from @/components/test1.vue
export default {
  name: App,
  data () {
    return {
      msg: parent
    }
  },
  components: {test1},
  methods: {
    parfn: function (a) {
      alert(a)
    }
  }
}
</script>

  test1.vue代码: 

<template>
    <div>i am test1</div>
</template>

<script>
export default {
  data () {
    return {
      msg: test1
    }
  },
  mounted: function () {
    this.$emit(myfn, this.msg)
  }
}
</script>

效果图:

技术图片

 

父向子传值方式1:通过props

  App.vue代码: 

<template>
  <div id="app">
    <test1 :msg="msg"></test1>
  </div>
</template>

<script>
import test1 from @/components/test1.vue
export default {
  name: App,
  data () {
    return {
      msg: parent
    }
  },
  components: {test1}
}
</script>

  test1.vue代码:

<template>
    <div>i am test1</div>
</template>

<script>
export default {
  props: [msg],
  created: function () {
    alert(this.msg)
  }
}
</script>

  效果图:

  技术图片

父向子方式2:通过$children

  App.vue代码:  

<template>
  <div id="app">
    <test1></test1>
  </div>
</template>

<script>
import test1 from @/components/test1.vue
export default {
  name: App,
  data () {
    return {
      msg: parent
    }
  },
  mounted: function () {
    this.$children[0].childfn(this.msg)
  },
  components: {test1}
}

  test1.vue代码  

<template>
    <div>i am test1</div>
</template>

<script>
export default {
  methods: {
    childfn: function (a) {
      alert(a)
    }
  }
}
</script>

  效果图:

  技术图片

父向子方式3:通过ref

  App.vue代码: 

<template>
  <div id="app">
    <test1 ref="mychild"></test1>
  </div>
</template>

<script>
import test1 from @/components/test1.vue
export default {
  name: App,
  data () {
    return {
      msg: parent
    }
  },
  mounted: function () {
    this.$refs.mychild.childfn(this.msg)
  },
  components: {test1}
}
</script>

  test1.vue代码: 

<template>
    <div>i am test1</div>
</template>

<script>
export default {
  methods: {
    childfn: function (a) {
      alert(a)
    }
  }
}
</script>

  效果图:

  技术图片

 

以上是关于总结vue中组件相互传值的几种方式的主要内容,如果未能解决你的问题,请参考以下文章

父子组件传值的几种方式

vue中请求的几种方式

vue中的几种校验方式

vue组件中的几种传值方式----下篇

Vue中组件间传值常用的几种方式

react组件传值的几种方式