vue中组件传参的几种方法

这篇具有很好参考价值的文章主要介绍了vue中组件传参的几种方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.父子组件

  1. Props:通过在父组件中定义props属性,将数据传递给子组件。子组件通过props属性接收数据。例如:
// 父组件
<template>
  <child-component :message="hello"></child-component>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      hello: 'Hello World!'
    }
  }
}
</script>

// 子组件
<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  props: {
    message: String
  }
}
</script>
  1. $emit:通过在子组件中触发事件,将数据传递给父组件。父组件通过在子组件上监听事件,接收数据。例如:
// 子组件
<template>
  <button @click="sendMessage">Send Message</button>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('message-sent', 'Hello World!')
    }
  }
}
</script>

// 父组件
<template>
  <child-component @message-sent="handleMessage"></child-component>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  methods: {
    handleMessage(message) {
      console.log(message) // 'Hello World!'
    }
  }
}
</script>
  1. Provide/Inject:通过在父组件中提供数据,让子孙组件可以注入数据。例如:
// 父组件
<template>
  <div>
    <provide-message :message="hello">
      <child-component></child-component>
    </provide-message>
  </div>
</template>

<script>
import ProvideMessage from './ProvideMessage.vue'
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ProvideMessage,
    ChildComponent
  },
  data() {
    return {
      hello: 'Hello World!'
    }
  }
}
</script>

// ProvideMessage组件
<template>
  <div>
    <slot></slot>
  </div>
</template>

<script>
export default {
  provide() {
    return {
      message: this.message
    }
  },
  props: {
    message: String
  }
}
</script>

// 子组件
<template>
  <div>{{ message }}</div>
</template>

<script>
export default {
  inject: ['message']
}
</script>

以上是Vue中组件传参的三种常用方法,分别是Props、$emit和Provide/Inject。通过这些方法,我们可以在组件之间传递数据,实现组件之间的通信。

2.兄弟组件

  1. 通过共同的父组件传递数据:如果两个兄弟组件有共同的父组件,可以通过在父组件中定义数据,然后通过props属性分别传递给两个兄弟组件。例如:
// 父组件
<template>
  <div>
    <child-component-1 :message="hello"></child-component-1>
    <child-component-2 :message="world"></child-component-2>
  </div>
</template>

<script>
import ChildComponent1 from './ChildComponent1.vue'
import ChildComponent2 from './ChildComponent2.vue'

export default {
  components: {
    ChildComponent1,
    ChildComponent2
  },
  data() {
    return {
      hello: 'Hello',
      world: 'World'
    }
  }
}
</script>

// ChildComponent1组件
<template>
  <div>{{ message }}!</div>
</template>

<script>
export default {
  props: {
    message: String
  }
}
</script>

// ChildComponent2组件
<template>
  <div>{{ message }}!</div>
</template>

<script>
export default {
  props: {
    message: String
  }
}
</script>
  1. 通过事件总线传递数据:可以在Vue实例中创建一个事件总线,然后在兄弟组件中分别触发和监听事件,从而实现数据传递。例如:
// Vue实例
<script>
export default {
  data() {
    return {
      message: ''
    }
  },
  created() {
    this.$on('message-sent', (message) => {
      this.message = message
    })
  }
}
</script>

// ChildComponent1组件
<template>
  <button @click="sendMessage">Send Message</button>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      this.$root.$emit('message-sent', 'Hello')
    }
  }
}
</script>

// ChildComponent2组件
<template>
  <div>{{ message }} World!</div>
</template>

<script>
export default {
  computed: {
    message() {
      return this.$root.message
    }
  }
}
</script>
  1. 通过Vuex状态管理传递数据:可以使用Vuex来管理应用程序的状态,从而实现兄弟组件之间的数据传递。例如:
// Vuex store
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    message: ''
  },
  mutations: {
    setMessage(state, message) {
      state.message = message
    }
  }
})

// ChildComponent1组件
<template>
  <button @click="sendMessage">Send Message</button>
</template>

<script>
export default {
  methods: {
    sendMessage() {
      this.$store.commit('setMessage', 'Hello')
    }
  }
}
</script>

// ChildComponent2组件
<template>
  <div>{{ message }} World!</div>
</template>

<script>
export default {
  computed: {
    message() {
      return this.$store.state.message
    }
  }
}
</script>

以上是Vue中兄弟组件传参的三种常用方法,分别是通过共同的父组件传递数据、通过事件总线传递数据和通过Vuex状态管理传递数据。根据具体的场景和需求,选择合适的方法来实现兄弟组件之间的数据传递。

3.祖先后代

  1. 通过props和 e m i t 传递数据:祖先组件可以通过 p r o p s 属性将数据传递给中间组件,中间组件再通过 p r o p s 属性将数据传递给后代组件。后代组件可以通过 emit传递数据:祖先组件可以通过props属性将数据传递给中间组件,中间组件再通过props属性将数据传递给后代组件。后代组件可以通过 emit传递数据:祖先组件可以通过props属性将数据传递给中间组件,中间组件再通过props属性将数据传递给后代组件。后代组件可以通过emit事件将数据传递回祖先组件。例如:
// 祖先组件
<template>
  <div>
    <middle-component :message="hello"></middle-component>
  </div>
</template>

<script>
import MiddleComponent from './MiddleComponent.vue'

export default {
  components: {
    MiddleComponent
  },
  data() {
    return {
      hello: 'Hello'
    }
  }
}
</script>

// 中间组件
<template>
  <div>
    <child-component :message="message" @message-sent="sendMessage"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  props: {
    message: String
  },
  methods: {
    sendMessage(message) {
      this.$emit('message-sent', message)
    }
  }
}
</script>

// 后代组件
<template>
  <div>{{ message }} World!</div>
</template>

<script>
export default {
  props: {
    message: String
  }
}
</script>
  1. 通过provide和inject传递数据:祖先组件可以通过provide方法提供数据,后代组件可以通过inject方法注入数据。例如:
// 祖先组件
<template>
  <div>
    <middle-component>
      <child-component></child-component>
    </middle-component>
  </div>
</template>

<script>
import MiddleComponent from './MiddleComponent.vue'

export default {
  components: {
    MiddleComponent
  },
  provide() {
    return {
      message: 'Hello'
    }
  }
}
</script>

// 中间组件
<template>
  <div>
    <slot></slot>
  </div>
</template>

// 后代组件
<template>
  <div>{{ message }} World!</div>
</template>

<script>
export default {
  inject: ['message']
}
</script>
  1. 通过Vuex状态管理传递数据:祖先组件和后代组件都可以通过Vuex来管理应用程序的状态,从而实现数据传递。例如:
// Vuex store
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    message: 'Hello'
  },
  mutations: {
    setMessage(state, message) {
      state.message = message
    }
  }
})

// 祖先组件
<template>
  <div>
    <middle-component>
      <child-component></child-component>
    </middle-component>
  </div>
</template>

<script>
import MiddleComponent from './MiddleComponent.vue'

export default {
  components: {
    MiddleComponent
  }
}
</script>

// 中间组件
<template>
  <div>
    <slot></slot>
  </div>
</template>

// 后代组件
<template>
  <div>{{ message }} World!</div>
</template>

<script>
export default {
  computed: {
    message() {
      return this.$store.state.message
    }
  }
}
</script>

以上是Vue中祖先组件和后代组件传递数据的三种常用方法,分别是通过props和$emit传递数据、通过provide和inject传递数据和通过Vuex状态管理传递数据。根据具体的场景和需求,选择合适的方法来实现祖先组件和后代组件之间的数据传递。

4.参数传递和插槽之间的联系

在Vue中,传参和插槽是两个不同的概念,但它们之间有一定的关系。

传参是指在组件之间传递数据,可以通过props和$emit、provide和inject、Vuex等方式实现。传参的目的是让组件之间可以共享数据,从而实现组件之间的通信。

插槽是指在组件中定义一个或多个插槽,然后在使用该组件时,可以在插槽中插入任意内容。插槽的目的是让组件更加灵活,可以根据使用场景动态地插入不同的内容。

传参和插槽之间的关系在于,传参可以用来控制插槽中的内容。例如,可以通过props属性将数据传递给子组件,在子组件中使用插槽来展示这些数据。又例如,可以通过$emit事件将子组件中的数据传递给父组件,在父组件中使用插槽来展示这些数据。

下面是一个示例,演示了如何通过传参和插槽来控制组件中的内容:

// 父组件
<template>
  <div>
    <child-component :message="hello">
      <template #default="{ message }">
        <div>{{ message }} World!</div>
      </template>
    </child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  components: {
    ChildComponent
  },
  data() {
    return {
      hello: 'Hello'
    }
  }
}
</script>

// 子组件
<template>
  <div>
    <slot :message="message"></slot>
  </div>
</template>

<script>
export default {
  props: {
    message: String
  },
  data() {
    return {
      message: this.message
    }
  }
}
</script>

在上面的示例中,父组件通过props属性将数据传递给子组件,子组件通过插槽将数据传递给父组件。具体来说,父组件将数据hello传递给子组件,子组件将数据message传递给插槽,父组件通过插槽接收数据并展示在页面上。

总之,传参和插槽是两个不同的概念,但它们之间有一定的关系。传参可以用来控制插槽中的内容,从而实现组件之间的通信和动态渲染。文章来源地址https://www.toymoban.com/news/detail-652267.html

到了这里,关于vue中组件传参的几种方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序返回上级页面传参的几种方法

    在做微信小程序跳转页面,经常会遇到二级页面要返回上级页面,并且需要携带参数,wx.navigateTo()跳转大家都知道直接在url上面拼接参数,之后再二级页面onLoad(options)里获取,但是返回页面wx.navigateBack()不可以那样做,所以就可以用以下几种方式来做,具体看个人业务适合用

    2024年02月08日
    浏览(76)
  • taro跳转页面传参的几种方式

    我之前在网上也搜了挺多taro传参的方式,这里我总结一下 路由跳转分Taro.navigateTo与Taro.redirectTo, 但是这两种方法只适用于传递少量参数 Taro.navigateTo跳转时是将新的页面加载过来,最多加载到10层,返回时去的是上一页; Taro.redirectTo跳转的同时将当前页面销毁,返回时去的是

    2024年02月07日
    浏览(45)
  • 微信小程序页面之间传参的几种方式

    目录 前言 第一种:url传值 url传值使用详细说明 api跳转 组件跳转 第二种:将值缓存在本地,再从本地取值 第三种:全局传值(应用实例传值) 第四种:组件传值 第五种:使用通信通道(通信通道是wx.navitageTo()独有的) 第六中:使用页面栈(只对当前页面栈中存在的页面生效

    2024年04月13日
    浏览(43)
  • Vue3父子组件间传参通信

    本文主要是记录Vue3在setup语法糖下的父子组件间传参的四种方式 Vue3+TypeScript 父组件传值给子组件主要是由父组件为子组件通过v-bind绑定数值,而后传给子组件;子组件则通过defineProps接收使用。 如下为父组件 Father.vue 如下为子组件Son.vue 父组件 Father.vue 中在调用 Son.vue 这个子

    2024年01月19日
    浏览(75)
  • vue引入组件的几种方法

    目录 一、常用的局部引入 二、创建一个js 进行统一注册   然后在main.js引入统一管理的js文件实现全局注册 三、自动注册全局引入 总结: 在哪个页面需要就在那个页面 引入 、 注册 、 使用 1、global.js统一注册管理: 2、在main.js中引入 global.js实现全局注册 优点: 减少每个

    2024年02月16日
    浏览(41)
  • vue子组件调用父组件方法的几种方式

    一、直接在子组件中通过  this.$parent.event来调用父组件方法 父组件 子组件 二、在子组件里用 $emit 向父组件触发一个事件,父组件监听这个事件 父组件 子组件 三、父组件将方法传入子组件,子组件直接调用 父组件 子组件

    2024年02月12日
    浏览(42)
  • Vue3实现组件级基类的几种方法

    Vue3的组件有三种代码组织方式 纯Option API (不含setup) option API + setup 纯 setup (即composition API) 对于这三种形式,设置基类的方法也略有不同。 vue3提供了 mixins和extends,但是尝试之后发现这两种方法只支持纯OptionAPI,设置的data会被识别,但是设置的setup里return 的 reactive,完

    2024年02月01日
    浏览(56)
  • vue组件间传值的六种方法

    父组件代码: 子组件代码: 页面显示: 子组件代码: 父组件代码: 页面显示: 父子组件传值原理:父子组件的关系可以总结为 prop 向下传递,事件向上传递。父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息,如下图所示: ref:如果在普通的 DOM 元素

    2024年02月15日
    浏览(49)
  • uniapp 页面间传参方法

    页面之间传参大概可分为以下几种情况: 上级页面 → 下级页面(单向) 上级页面 ← 下级页面(单向) 上级页面 ↔ 下级页面(双向) uni.navigateTo:URL编程式传参 作为最常用也是最简单的跳转携带参数的API,这里不多赘述,想详细了解的朋友可以前往官方文档学习,这里只

    2024年02月07日
    浏览(36)
  • 第三方组件及计算属性传参的问题解决方式

    唉,好想玩滋嘣。 表格数据某一列需要用的计算属性时,模板中使用计算属性 fullName 就会直接调用 fullName 函数,而在模板中 fullName(item) 相当于 fullName()(item) ,此处为函数柯里化。 封装好的组件的事件回调函数想要传其它参数,事件的回调直接写 :before-upload=\\\"beforeUpload(\\\'a\\\')

    2024年02月05日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包