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

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日

相关文章

  • Vue替代vuex的存储库Pinia详细介绍

    关于“Vue替代vuex的存储库Pinia详细介绍”的攻略,我会详细讲解以下几个方面: 什么是Pinia Pinia 的使用方式 Pinia 与 Vuex 的比较 示例说明 1. 什么是Pinia Pinia 是一个基于 Vue 3 的状态管理库,它的官方网站是 https://pinia.esm.dev/ 。 Pinia 是按功能设计的,让您可以轻松管理V…

    Vue 2023年5月27日
    00
  • 详解VueJs中的V-bind指令

    下面是对“详解VueJs中的V-bind指令”的完整攻略: 什么是v-bind指令 v-bind指令是Vue.js中的一个指令,用于绑定元素属性和组件的属性。通过v-bind可以为HTML元素或Vue组件动态绑定属性或组件的属性。v-bind可以接受JavaScript表达式作为参数,这样就可以动态地给元素或组件设置属性值,或者是通过属性绑定来实现数据的双向…

    Vue 2023年5月27日
    00
  • 深入理解Vue响应式原理及其实现方式

    深入理解Vue响应式原理及其实现方式 什么是Vue响应式原理 Vue.js是一种用于构建交互式Web界面的渐进式JavaScript框架,可以帮助开发者更高效地构建Web应用。Vue的响应式原理是Vue最重要的特性之一,它允许开发者通过声明式数据绑定来管理应用的状态,并自动跟踪数据之间的依赖关系和更新视图,提高了开发效率并提供更好的用户体验。 在Vue的响应…

    Vue 2023年5月27日
    00
  • vue修改对象的属性值后页面不重新渲染的实例

    Vue.js是一个响应式框架,它支持组件化开发,当数据发生改变时,页面会自动更新。但是,在使用Vue.js时有一个问题:当修改对象的属性值后,页面不会重新渲染。这是因为Vue.js检测数据的变化是基于对象的setter方法,而不是对于对象的属性的getter/setter的监听,导致Vue.js无法发现对象属性的修改。因此,我们需要特殊的处理来让Vue.js…

    Vue 2023年5月28日
    00
  • vue中异步函数async和await的用法说明

    下面就给您详细讲解下“vue中异步函数async和await的用法说明”的完整攻略。 1.什么是异步函数 在Vue中,经常会使用异步函数来处理异步操作,比如通过Ajax获取远程的数据、读取本地数据库等等。异步函数是一种特殊的函数,可以使函数的执行不阻塞主线程,并且可以在异步操作完成后通过回调函数来处理结果。在Vue中,异步函数通常使用Promise或asyn…

    Vue 2023年5月28日
    00
  • vue对象的深度克隆方式

    当我们需要将Vue.js中的对象进行克隆时,通常会使用深度克隆方式,以保证克隆后的对象与原对象完全独立。 Vue.js中的对象克隆可以通过JSON.parse()与JSON.stringify()方法实现。具体实现步骤如下: 1.使用JSON.stringify()将原对象转化为JSON字符串。 2.使用JSON.parse()将JSON字符串转化为新对象。…

    Vue 2023年5月28日
    00
  • vue 使用el-table循环生成表格的过程

    下面我将详细讲解使用 Vue 和 el-table 循环生成表格的完整攻略。该过程可以分为以下几个步骤: 引入必须的依赖 首先,需要在你的代码中引入必须的依赖,这包括 Vue 框架及其 Element-UI 组件库。 <!– index.html –> <!– 引入 Vue 和 Element-UI–> … <scr…

    Vue 2023年5月28日
    00
  • 详解Vue前端生产环境发布配置实战篇

    下面我将为您详细讲解“详解Vue前端生产环境发布配置实战篇”的完整攻略,包含以下内容: 一、前置准备 在开始前,我们需要完成以下准备工作: 安装Node.js和Vue-cli 创建一个Vue项目 配置生产环境的基础设置 二、环境配置 修改“package.json”文件中的“build”脚本,指定“NODE_ENV”为“production”,示例如下: &…

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