Vue父子模版传值及组件传值的三种方法

下面是“Vue父子模版传值及组件传值的三种方法”的完整攻略:

1. 父子模板传值

1.1 props

Vue中通过使用props来实现父子组件之间传递数据的功能。在父组件中,通过定义属性的方式将需要传递的数据绑定在子组件上;在子组件中,通过props选项来声明需要绑定哪些属性,最终父组件的数据会通过props传递给子组件。

下面是一个使用props传递数据的示例:

<template>
  <div>
    <h3>{{ title }}</h3>
    <ChildComponent :msg="message" />
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  },
  data () {
    return {
      title: '父子组件传值示例',
      message: '这是从父组件传递的数据'
    }
  }
}
</script>

在父组件中,我们定义了一个data属性message,存储了需要传递给子组件的数据。然后通过在子组件上绑定msg属性,将message属性的值传递给子组件。

在子组件中,可以通过props选项来声明需要绑定哪些属性,这里我们声明了一个名为msg的属性。

<template>
  <div>{{ msg }}</div>
</template>

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

在子组件中,我们使用{{msg}}语法来显示从父组件中传递过来的数据。

1.2 $emit

除了使用props来实现父子组件之间传递数据的功能,Vue还提供了方法$emit来实现父组件向子组件通信的功能。在父组件中,通过$emit方法来触发子组件中定义的自定义事件;在子组件中,通过定义自定义事件来接收父组件触发的事件。

下面是一个使用$emit传递数据的示例:

<template>
  <div>
    <h3>{{ title }}</h3>
    <ChildComponent @sendMsg="receiveMsg" />
  </div>
</template>

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

export default {
  components: {
    ChildComponent
  },
  data () {
    return {
      title: '父子组件传值示例',
      message: ''
    }
  },
  methods: {
    receiveMsg (msg) {
      this.message = msg
    }
  }
}
</script>

在父组件中,我们定义了一个data属性message,用来存储从子组件中接收到的数据。然后在子组件中使用@sendMsg监听子组件自定义事件sendMsg,在触发sendMsg事件的时候传递数据。

<template>
  <div>
    <button @click="send">发送消息</button>
  </div>
</template>

<script>
export default {
  methods: {
    send () {
      this.$emit('sendMsg', '这是从子组件传递的数据')
    }
  }
}
</script>

在子组件中,我们定义了一个按钮,并在按钮的点击事件中触发了自定义事件sendMsg,并传递了数据。

2. 组件传值

2.1 Provide & Inject

Vue中使用Provide & Inject来实现跨级组件之间传递数据的功能。在父组件中,通过定义provide选项来声明需要提供给子组件的数据;在子组件中,通过定义inject选项来声明需要注入哪些数据。

下面是一个使用Provide & Inject传递数据的示例:

<template>
  <div>
    <h3>{{ title }}</h3>
    <ChildOne />
  </div>
</template>

<script>
import ChildOne from './ChildOne.vue'
export default {
  components: {
    ChildOne
  },
  provide () {
    return {
      message: '这是从父组件提供的数据'
    }
  },
  data () {
    return {
      title: 'Vue组件传值示例'
    }
  }
}
</script>

在父组件中,我们通过定义provide选项来提供数据给子组件。这里我们创建了一个名为message的provide属性,将需要传递的数据存储到message属性中。

<template>
  <div>{{ msg }}</div>
</template>

<script>
export default {
  inject: ['message'],
  computed: {
    msg () {
      return this.message
    }
  }
}
</script>

在子组件中,我们通过定义inject选项来声明需要注入哪些数据。这里我们声明了需要注入message属性,然后通过计算属性实现将message属性的值绑定到子组件的data属性中。

2.2 EventBus

Vue中可以通过EventBus来实现任意组件之间的传值。EventBus包含两个API:$on用于监听事件,$emit用于触发事件。

下面是一个使用EventBus传递数据的示例:

我们在一个新建的bus.js文件中定义了EventBus实例:

import Vue from 'vue'

export default new Vue()

在父组件中,我们引用了定义好的EventBus实例:

<template>
  <div>
    <h3>{{ title }}</h3>
    <ChildOne />
  </div>
</template>

<script>
import ChildOne from './ChildOne.vue'
import bus from './bus'

export default {
  components: {
    ChildOne
  },
  data () {
    return {
      title: 'Vue组件传值示例'
    }
  },
  mounted () {
    bus.$on('message', (data) => {
      console.log(data)
    })
  }
}
</script>

在父组件中,我们通过引入定义好的bus.js文件,并在mounted函数中通过bus.$on监听了名为message的事件,打印传递过来的数据。

<template>
  <div>
    <button @click="send">发送消息</button>
  </div>
</template>

<script>
import bus from './bus'

export default {
  methods: {
    send () {
      bus.$emit('message', '这是从子组件传递过来的数据')
    }
  }
}
</script>

在子组件中,我们发送了一个名为message的事件,并传递了数据。

通过以上三种方法,我们可以轻松实现组件之间、父子组件之间的数据传递;同时也保证了组件的通用性,不同组件之间相互独立,非常适合Vue的组件化思想。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue父子模版传值及组件传值的三种方法 - Python技术站

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

相关文章

  • vue如何使用vue slot封装公共组件

    下面我将详细讲解如何使用vue slot封装公共组件: 什么是Vue Slot? Vue Slot是Vue.js中一种非常流行且实用的特性,它允许我们将一个组件的内容插入到特定的插槽位置上。通过使用Vue Slot,我们可以轻松地封装一个可以扩展的、高度可定制的公共组件。 创建可复用的Vue组件 在使用Vue Slot封装公共组件之前,我们需要创建一个可复用…

    Vue 2023年5月28日
    00
  • vue使用ajax获取后台数据进行显示的示例

    使用 Vue.js 进行前端开发时,常常需要从后端获取数据,并将其显示在页面上。其中一个常用的方式是通过 Ajax 技术向后端服务器发送 HTTP 请求,在得到响应后在前端页面上进行展示。下面是使用 Vue.js 实现向后端服务器发送 Ajax 请求并将其返回结果显示在页面上的示例攻略。 1. 在 Vue.js 中使用 Ajax Vue.js 提供了内置的 …

    Vue 2023年5月28日
    00
  • vue拖拽添加的简单实现

    接下来我将详细讲解如何实现 Vue 拖拽添加的简单实现,包括如何安装依赖、编写代码、添加样式等具体步骤。 步骤一 安装依赖 首先需要在项目中安装 Vue.Draggable 这个库,它是一个适用于 Vue 的 drag-and-drop 库,可以帮助我们在 Vue 项目中轻松地实现拖拽功能。 npm install -S vuedraggable 步骤二 编…

    Vue 2023年5月28日
    00
  • 如何测量vue应用运行时的性能

    下面就为大家介绍如何测量Vue应用运行时的性能。 1.为什么测量Vue应用的性能 在开发Vue应用时,为了确保用户体验和性能,需要对应用进行性能优化。因此,我们需要知道如何测量Vue应用的性能,以便确定何时需要进行优化。 2.测量方式 2.1 使用Vue开发者工具 Vue开发者工具是一个非常强大的Chrome扩展程序,可以帮助我们更好地调试和优化Vue应用。…

    Vue 2023年5月27日
    00
  • Vue学习之组件用法实例详解

    Vue学习之组件用法实例详解 1. 组件的定义与引用 组件是一种抽象的概念,它可以将一些共用的逻辑和界面封装起来,形成一个独立的组件,供其他部分进行复用。在Vue中,组件既可以全局注册,也可以按需注册。 1.1 全局注册组件 全局注册组件是指在Vue实例化之前定义好组件,这样后面的任何Vue实例都可以使用这个组件。 Vue.component(‘compon…

    Vue 2023年5月27日
    00
  • spring boot读取Excel操作示例

    Spring Boot读取Excel操作示例 对于Java开发人员来说,我们通常需要读取Excel文件中的数据来进行数据处理或导入到数据库中。在Spring Boot中,我们可以使用Apache POI库来实现读取Excel文件的操作。 步骤1:添加Apache POI依赖 在pom.xml文件中添加以下依赖: <dependency> <…

    Vue 2023年5月28日
    00
  • vue项目中使用pinyin转换插件方式

    以下是使用pinyin转换插件在vue项目中的详细步骤: 步骤1:安装pinyin转换插件 在vue项目的命令行终端,使用npm或yarn等包管理工具安装pinyin插件,命令如下: npm install pinyin –save 或 yarn add pinyin 步骤2:在vue组件中引入pinyin插件及相关依赖 在需要使用pinyin转换的vue…

    Vue 2023年5月28日
    00
  • 使用命令行工具npm新创建一个vue项目的方法

    创建Vue项目的步骤如下: 安装Node.js和npm 首先需要在电脑上安装Node.js和npm(Node.js包管理工具)。Node.js是运行于服务器端的JavaScript解释器,而npm是随同Node.js一起安装的包管理器,用于管理Node.js模块和软件包。 使用命令行工具创建一个文件夹,用于存储Vue项目文件 在命令行工具(如Git Bash…

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