VUE组件传参超详细讲解

下面是“VUE组件传参超详细讲解”的完整攻略:

一、组件传参的概述

在Vue中,组件间的通信是一个十分重要的概念。而组件传参是组件通信的核心之一。在Vue中有很多种组件传参的方式,包括:Props、$emit事件等。下面将对这些方式逐一进行详细介绍。

二、Props传参

1. 父组件向子组件传参

使用Props实现父组件向子组件传参。

  1. 在父组件中定义要传递的参数:
<!-- 父组件模板 -->
<template>
  <child-component :propA="valueA"></child-component>
</template>

<script>
  export default {
    data() {
      return {
        valueA: '我是传递给子组件的参数'
      }
    },
    ...
  }
</script>
  1. 在子组件中使用props接收参数:
<!-- 子组件模板 -->
<template>
  <div>{{propA}}</div>
</template>

<script>
  export default {
    props: ['propA'],
    ...
  }
</script>

2. 子组件向父组件传参

父组件除了向子组件传参之外,还可以通过v-on监听子组件触发的事件,实现子组件向父组件传参。

  1. 在子组件中使用$emit方法触发事件,并传递参数:
<!-- 子组件模板 -->
<template>
  <button @click="handleClick">点击传递参数</button>
</template>

<script>
  export default {
    methods: {
      handleClick() {
        this.$emit('on-change', '我是要传递的参数')
      }
    },
    ...
  }
</script>
  1. 在父组件中使用v-on监听子组件触发的事件:
<!-- 父组件模板 -->
<template>
  <child-component v-on:on-change="handleChange"></child-component>
</template>

<script>
  export default {
    methods: {
      handleChange(param) {
        console.log(param)
      }
    },
    ...
  }
</script>

三、$attrs和$listeners

1. $attrs

在组件之间传递大量的属性和事件时,可能需要把这些属性传递给子组件,但是,这样做可能会对子组件产生一定程度的影响。$attrs 选项是允许将父组件中未被 prop 所识别(且获取 prop 的默认值)的特性绑定到一个非根级别的子组件上的。

<!-- 父组件模板 -->
<template>
  <div>
    <child-component value="父组件定义的 value"></child-component>
  </div>
</template>

<!-- 子组件模板 -->
<template>
  <div>
    <div>{{value}}</div> <!-- 传递来的属性 -->
    <div>{{another}}</div> <!-- 非Prop的属性 -->
  </div>
</template>

<script>
  export default {
    props: ['value'],
    computed: {
      // 获取不是property的属性
      another() {
        return this.$attrs.another
      }
    },
    ...
  }
</script>

2. $listeners

$listeners 选项用于将父组件的事件监听器直接传递给子组件,不需要通过子组件事件传递。

<!-- 父组件模板 -->
<template>
  <div>
    <child-component v-on:click="handleClick"></child-component>
  </div>
</template>

<!-- 子组件模板 -->
<template>
  <button v-on="$listeners">子组件按钮</button>
</template>

<script>
  export default {
    ...
  }
</script>

四、使用vuex传参

Vuex 是一个专门为 Vue.js 应用程序开发的状态管理模式,通过这个模式,我们可以方便的进行组件间传参。

在Vuex中,可以使用store对象来管理应用程序的状态。在store对象中定义state状态、mutations和actions。

  1. 在store中定义state状态
// store.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0,
    message: 'Hello Vuex'
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  actions: {
    asyncIncrement ({ commit }) {
      setTimeout(() => {
        commit('increment')
      }, 1000)
    }
  }
})
  1. 在组件中使用state、mutations、actions

在需要使用state、mutations、actions的页面中,需要使用mapStatemapMutationsmapActions连接到store中。

<template>
  <div>
    <p>{{count}}</p>
    <button @click="increment">+</button>
    <button @click="asyncIncrement">异步加1</button>
    <p>{{message}}</p>
    <input @input="setMessage" :value="message">
  </div>
</template>

<script>
import { mapState, mapMutations, mapActions } from 'vuex'

export default {
  computed: {
    ...mapState({
      count: state => state.count,
      message: state => state.message
    })
  },
  methods: {
    ...mapMutations([
      'increment'
    ]),
    ...mapActions([
      'asyncIncrement'
    ]),
    setMessage (event) {
      this.$store.commit('setMessage', event.target.value)
    }
  },
  ...
})
</script>

五、总结

本文详细介绍了使用Props、$emit、$attrs、$listeners和Vuex进行组件传参的方法。以上这些方法都有各自的优缺点,在具体的开发场景中,可以根据实际情况选择适用的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:VUE组件传参超详细讲解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • jQWidgets jqxInput popupZIndex属性

    jQWidgets jqxInput popupZIndex属性攻略 简介 jQWidgets 是一个基于 jQuery 的 UI 组件库,提供丰富的 UI 组件和工具用于创建现代化应用程序。jqxInput 组件用于创建一个文本输入框。本攻略详细介绍 jqxInput 组件 popupZIndex 属性,包括如何使用和示例。 使用 jqxInput 组件的…

    jquery 2023年5月10日
    00
  • jQuery EasyUI API 中文文档 – Calendar日历使用

    下面是关于“jQuery EasyUI API 中文文档 – Calendar日历使用”的完整攻略。 jQuery EasyUI API 中文文档 – Calendar日历使用 Calendar简介 Calendar是EasyUI提供的一款日历插件,可以用来选择日期等操作。 Calendar基本用法 引入EasyUI的JS和CSS文件 在HTML中添加一个d…

    jquery 2023年5月28日
    00
  • 基于jQuery实现左右div自适应高度完全相同的代码

    实现左右div自适应高度完全相同是前端开发中常见的需求,通过jQuery可以轻松实现该功能。下面是具体的实现攻略。 步骤一:设定HTML结构 首先,需要在HTML页面中设定两个div容器,分别设置 ID 属性值为 left 和right,并设置宽度为 50%。左右两个容器之间是并列关系。 <div id="left" style=&…

    jquery 2023年5月27日
    00
  • jQuery jQWidgets

    jQuery jQWidgets jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI组件和工具,包括表格、图表、表单、日历、菜单等。本文将详细介绍jQWidgets的基本概念、使用方法和示例。 基本概念 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI组件和工具,包括表格、图表、表单、日历、菜单等。jQWidgets…

    jquery 2023年5月9日
    00
  • input:checkbox多选框实现单选效果跟radio一样

    讲解“input:checkbox多选框实现单选效果跟radio一样”的完整攻略如下: 1. 设置checkbox的name属性 为了实现多选框的单选效果,我们需要给多选框设置相同的name属性。这样多选框就能够相互关联起来,保证只能选择其中一个。 2. 使用JavaScript实现单选效果 我们可以使用JavaScript来判断当前选择的多选框是否是选中状…

    jquery 2023年5月18日
    00
  • 在jQuery中,代码执行的起始点是什么

    在jQuery中,代码执行的起始点是文档加载完成后的ready事件。当文档加载完成后,jQuery会触发ready事件,这时候我们可以在事件处理程序中编写jQuery代码,对文档中的元素进行操作。 ready事件的基本语法 ready事件的基本语法如下: $(document).ready(function() { // 在这里编写jQuery代码 }); …

    jquery 2023年5月9日
    00
  • 在jQuery中处理XML数据的大致方法

    在jQuery中处理XML数据有以下大致方法: 使用jQuery的$.ajax()函数加载XML文件 我们可以使用$.ajax()函数来加载XML文件,然后使用回调函数处理数据。其中,dataType选项需要设置为”xml”,表示我们要加载的是XML文件。 下面是一个加载XML数据并处理的示例代码: $.ajax({ type: "GET&quot…

    jquery 2023年5月27日
    00
  • jQWidgets jqxBarGauge height属性

    jQWidgets jqxBarGauge height属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富的UI件和工具,包括表格、图表单、历、菜单等。其中,jqBarGauge是jQWidgets中的一个组件,可以用于水平或垂直的条形图。jqBarGauge提供了height属性,用于设置条图的高度。 height属性的基本语法 hei…

    jquery 2023年5月9日
    00
合作推广
合作推广
分享本页
返回顶部