vue组件传值(高级)、属性传值、反向传值、跨级传值实例详解

yizhihongxing

Vue组件传值(高级)、属性传值、反向传值、跨级传值实例详解

在Vue中,组件传值是必不可少的一部分。组件间的传值分为父子组件传值、同级组件传值以及跨级传值等等,下面将详细介绍Vue组件传值的不同方式和实例。

属性传值

属性传值是父组件向子组件传递数据的一种方式,通过在父组件中使用子组件时设置props属性并传入数据,子组件在接收到数据后可以通过this.props或者$attrs来获取数据。下面是一个简单的例子:

<template>
  <div>
    <Child :name="name"></Child>
  </div>
</template>

<script>
import Child from "./Child.vue";

export default {
  components: {
    Child
  },
  data () {
    return {
      name: "Alice"
    }
  }
}
</script>

在父组件中使用子组件时,使用了:name="name"来将父组件中的name数据传递给子组件,在子组件中通过props接收数据:

<template>
  <div>{{name}}</div>
</template>

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

反向传值

反向传值是指从子组件向父组件传值。可以使用Vue的自定义事件来实现反向传值,原理是在子组件中通过$emit触发事件并将数据传递给父组件,在父组件中监听子组件的事件即可获取数据。下面是一个简单的例子:

<!-- 子组件 -->
<template>
  <div>
    <button @click="sendData()">点击</button>
  </div>
</template>

<script>
export default {
  methods: {
    sendData() {
      this.$emit('sendDataToParent', {name: 'Alice'});
    }
  }
}
</script>

在子组件中,this.$emit触发了一个名为sendDataToParent的事件,并同时传递了一个{name: 'Alice'}的对象作为数据,该事件会被派发到父组件。在父组件中监听该事件并接收子组件传递的数据:

<!-- 父组件 -->
<template>
  <div>
    <Child @sendDataToParent="getData"></Child>
    <div>{{data.name}}</div>
  </div>
</template>

<script>
import Child from "./Child.vue";

export default {
  components: {
    Child
  },
  data () {
    return {
      data: {}
    }
  },
  methods: {
    getData(data) {
      this.data = data;
    }
  }
}
</script>

在父组件中通过在子组件上绑定自定义事件(sendDataToParent),并设置事件回调函数getData来监听子组件的事件并获取数据。 getData方法中的data参数即为子组件通过$emit派发的事件对象中的数据。

跨级传值

有时,我们需要在不同层级的组件之间传递数据,这时可以通过在父组件中使用provide来提供数据,然后在所需的子组件中使用inject来注入数据。下面是一个简单的例子:

<!-- 父组件 -->
<template>
  <div>
    <Child :name="name"></Child>
  </div>
</template>

<script>
import Child from "./Child.vue";

export default {
  provide: {
    name: 'Alice'
  },
  components: {
    Child
  }
}
</script>

在父组件中,通过provide向子组件提供了名为name的数据,子组件在需要获取数据时通过inject来注入数据:

<!-- 子组件 -->
<template>
  <div>{{name}}</div>
</template>

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

在子组件中,使用了inject来注入父组件提供的name数据。

示例说明

示例1:从子组件向父组件反向传值

在这个示例中,我们将创建一个子组件,通过点击按钮向父组件传递一个数字,并在父组件中显示该数字。下面是完整的代码:

<!-- 子组件 -->
<template>
  <div>
    <button @click="increase()">增加</button>
  </div>
</template>

<script>
export default {
  data () {
    return {
      count: 1
    }
  },
  methods: {
    increase() {
      this.count++;
      this.$emit('update:count', this.count);
    }
  }
}
</script>

在子组件中,我们通过在按钮上绑定事件并在该事件中递增count数据,并通过$emit触发一个名为update:count的事件,并将count数据作为参数传递给父组件。注意这里使用了:update:count的语法糖来替代$emit('update:count',...)的写法,这也是Vue推荐使用的语法。

<!-- 父组件 -->
<template>
  <div>
    <Child :count="count" @update:count="updateCount"></Child>
    <div>当前数字为:{{count}}</div>
  </div>
</template>

<script>
import Child from "./Child.vue";

export default {
  components: {
    Child
  },
  data () {
    return {
      count: 0
    }
  },
  methods: {
    updateCount(count) {
      this.count = count;
    }
  }
}
</script>

在父组件中,我们在使用子组件时通过:count="count"的语法糖将父组件中的count数据传递给子组件,并监听了一个名为update:count的事件,事件回调函数updateCount方法被触发时将子组件传来的count数据赋值给父组件中的count。

示例2:使用provide/inject跨级传值

在这个示例中,我们将创建两个组件,分别为父组件和子组件,通过在父组件中提供一个数字并在子组件中注入该数字,最后在子组件中显示该数字。下面是完整的代码:

<!-- 父组件 -->
<template>
  <div>
    <Child></Child>
  </div>
</template>

<script>
import Child from "./Child.vue";

export default {
  provide: {
    count: 2
  },
  components: {
    Child
  }
}
</script>

在父组件中,我们通过provide提供一个名为count的数字2,供子组件使用。

<!-- 子组件 -->
<template>
  <div>{{count}}</div>
</template>

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

在子组件中,我们使用inject来注入名为count的数据,并在模板中显示该数据。

结论

Vue组件传值是Vue开发中的一项核心技能,熟练掌握组件传值的不同方式及其原理对于提高开发效率和设计优化都非常有帮助。以上提供了一些常见的组件传值方式及示例,希望能够对Vue开发者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue组件传值(高级)、属性传值、反向传值、跨级传值实例详解 - Python技术站

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

相关文章

  • vue3+ts+Vuex中使用websocket协议方式

    下面我将详细讲解在基于Vue3和TypeScript的项目中使用WebSocket协议方式的完整攻略,包括以下内容: 配置WebSocket连接 Vuex中管理WebSocket连接 发送和接收WebSocket消息 我们将使用Vue3和TypeScript构建一个简单的聊天室应用程序,该应用程序使用WebSocket协议进行通信。 配置WebSocket连…

    Vue 2023年5月28日
    00
  • vue实现双向数据绑定

    实现双向数据绑定是Vue.js的重要特性之一,也是Vue.js能够快速开发Web应用程序的重要原因。下面是基于Vue.js实现双向数据绑定的完整攻略。 Vue.js实现双向数据绑定的原理 Vue.js中的双向数据绑定,是通过使用数据劫持(Data Observer)和发布-订阅模式(Pub/Sub Pattern)的组合来实现的。 具体来说,Vue.js会对…

    Vue 2023年5月28日
    00
  • vue3 hook自动导入原理解析

    我来为你详细讲解一下“vue3 hook自动导入原理解析”的攻略。 什么是Vue3 Hook Vue3中,为了更好地组织代码,同时也为了解决vue2中使用mixin会出现命名冲突的问题,新增了Hook的概念。Hook实际上就是一些特定的函数,它们和组件生命周期函数类似,但是可以被任意组合使用,而且可以被多个组件复用。Vue3中内置了多个Hook,例如useS…

    Vue 2023年5月28日
    00
  • 简易Vue评论框架的实现(父组件的实现)

    下面我来详细讲解一下“简易Vue评论框架的实现(父组件的实现)”: 简述 本文主要介绍如何使用Vue.js实现一个简单的评论框架,涉及组件通信、事件触发等相关知识点。本文将从父组件的实现开始,带你逐步实现一个完整的评论框架。 父组件的实现 创建父组件 首先,我们需要创建一个父组件,用于渲染整个评论区。可以先创建一个Comment.vue文件,并定义一个简单的…

    Vue 2023年5月27日
    00
  • Vue项目从webpack3.x升级webpack4不完全指南

    下面就是Vue项目从webpack3.x升级webpack4.x的完整攻略。 升级前的准备 在升级之前,我们需要先做好以下准备工作: 确定当前项目使用的webpack版本; 了解当前使用的webpack配置,包括各个配置项以及对应的含义; 相关依赖库的版本是否与webpack4.x兼容,如vue-loader、babel-loader等。 在这个前置知识的基…

    Vue 2023年5月28日
    00
  • Vue 项目的成功发布和部署的实现

    Vue 项目的成功发布和部署,可以分为以下几个步骤: 1. 准备工作 在开始部署之前,需要确保你的项目已经完成开发,并成功运行在本地环境中。同时需要确保已经安装必要的环境和工具,例如:Node.js、Git、npm 或 yarn。 2. 打包 Vue 项目 使用 npm run build 或 yarn build 命令来打包 Vue 项目并生成可部署的静态…

    Vue 2023年5月28日
    00
  • Vue的watch和computed方法的使用及区别介绍

    Vue中的watch和computed都是用来监听数据变化的方法,但在使用时有些差别。下面将对Vue的watch和computed进行详细讲解,并给出两个示例。 Watch Watch的用法 watch可以监听数据的变化,并进行相应的操作。它可以监听一个或多个数据的变化,当数据发生变化时,会执行相应的回调函数。 watch: { username(newVa…

    Vue 2023年5月28日
    00
  • Vue-CLI3.x 自动部署项目至服务器的方法步骤

    Vue-CLI3.x 自动部署项目至服务器的方法步骤 Vue-CLI3.x 是一个官方发布的 Vue.js 项目脚手架工具,它能够快速创建一个基于 Vue.js 的项目,并提供了非常方便的开发工具。在使用 Vue-CLI3.x 进行开发过程中,为了能够让我们的项目能够在服务器上运行,需要对项目进行自动部署。本文将为大家介绍基于 Git、NodeJS、PM2 …

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