vue组件传值的11种方式总结

下面是对于“vue组件传值的11种方式总结”的详细讲解攻略:

1. props

  • 父组件通过props向子组件传递数据。
  • 子组件通过props接收传递过来的数据。

示例代码如下:

父组件:

<template>
  <ChildComponent :message="parentMessage"></ChildComponent>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  data() {
    return {
      parentMessage: 'Hello world'
    }
  },
  components: {
    ChildComponent
  }
}
</script>

子组件:

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

2. provide/inject

  • 父组件通过provide向子孙组件传递数据。
  • 子孙组件通过inject获取传递过来的数据。

示例代码如下:

祖先组件:

<template>
  <ParentComponent></ParentComponent>
</template>
<script>
import ParentComponent from './ParentComponent.vue'
export default {
  provide: {
    message: 'Hello world'
  },
  components: {
    ParentComponent
  }
}
</script>

父组件:

<template>
  <ChildComponent></ChildComponent>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  }
}
</script>

子组件:

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

3. $emit

  • 子组件通过$emit向父组件传递数据。
  • 父组件通过v-on监听子组件的事件,并接收传递过来的数据。

示例代码如下:

父组件:

<template>
  <ChildComponent @send-message="receiveMessage"></ChildComponent>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  methods: {
    receiveMessage(message) {
      console.log(message)
    }
  },
  components: {
    ChildComponent
  }
}
</script>

子组件:

<template>
  <button @click="sendMessage">Send Message</button>
</template>
<script>
export default {
  methods: {
    sendMessage() {
      this.$emit('send-message', 'Hello world')
    }
  }
}
</script>

4. v-model

  • 父组件通过v-model向子组件传递数据,并监听子组件的输入事件。
  • 子组件通过$emit向父组件传递数据。

示例代码如下:

父组件:

<template>
  <ChildComponent v-model="message"></ChildComponent>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  data() {
    return {
      message: 'Hello world'
    }
  },
  components: {
    ChildComponent
  }
}
</script>

子组件:

<template>
  <input :value="value" @input="$emit('input', $event.target.value)">
</template>
<script>
export default {
  props: ['value']
}
</script>

5. $parent

  • 子组件通过$parent访问父组件。
  • 子组件通过$parent访问父组件的数据和方法。

示例代码如下:

父组件:

<template>
  <ChildComponent></ChildComponent>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  data() {
    return {
      message: 'Hello world'
    }
  },
  methods: {
    showMessage() {
      console.log(this.message)
    }
  },
  components: {
    ChildComponent
  }
}
</script>

子组件:

<template>
  <button @click="$parent.showMessage">Show Message</button>
</template>

6. $children

  • 父组件通过$children访问子组件。
  • 父组件通过$children访问子组件的数据和方法。

示例代码如下:

父组件:

<template>
  <div>
    <button @click="showMessage">Show Message</button>
    <ChildComponent ref="childComponent"></ChildComponent>
  </div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  methods: {
    showMessage() {
      console.log(this.$refs.childComponent.message)
    }
  },
  components: {
    ChildComponent
  }
}
</script>

子组件:

<template>
  <div>{{ message }}</div>
</template>
<script>
export default {
  data() {
    return {
      message: 'Hello world'
    }
  }
}
</script>

7. EventBus

  • 父组件和子组件通过EventBus进行数据通信。

示例代码如下:

<!-- EventBus.js -->
import Vue from 'vue'
export default new Vue()

<!-- ParentComponent.vue -->
<template>
  <div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>
<script>
import EventBus from './EventBus.js'
export default {
  methods: {
    sendMessage() {
      EventBus.$emit('send-message', 'Hello world')
    }
  }
}
</script>

<!-- ChildComponent.vue -->
<template>
  <div>{{ message }}</div>
</template>
<script>
import EventBus from './EventBus.js'
export default {
  data() {
    return {
      message: ''
    }
  },
  mounted() {
    EventBus.$on('send-message', message => {
      this.message = message
    })
  }
}
</script>

8. Vuex

  • 父组件和子组件通过Vuex进行数据通信。

示例代码如下:

<!-- store.js -->
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
    }
  },
  actions: {
    setMessage({ commit }, message) {
      commit('setMessage', message)
    }
  }
})

<!-- ParentComponent.vue -->
<template>
  <div>
    <button @click="sendMessage">Send Message</button>
  </div>
</template>
<script>
import { mapActions } from 'vuex'
export default {
  methods: {
    ...mapActions(['setMessage']),
    sendMessage() {
      this.setMessage('Hello world')
    }
  }
}
</script>

<!-- ChildComponent.vue -->
<template>
  <div>{{ message }}</div>
</template>
<script>
import { mapState } from 'vuex'
export default {
  computed: {
    ...mapState(['message'])
  }
}
</script>

9. $attrs/$listeners

  • 子组件通过$attrs/$listeners访问父组件的属性和方法。

示例代码如下:

父组件:

<template>
  <ChildComponent message="Hello world" @click="showMessage"></ChildComponent>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  methods: {
    showMessage() {
      console.log('clicked')
    }
  },
  components: {
    ChildComponent
  }
}
</script>

子组件:

<template>
  <div>{{ $attrs.message }}</div>
  <button @click="$listeners.click">Click Me</button>
</template>

10. provide/inject + $attrs/$listeners

  • 使用provide/inject和$attrs/$listeners结合可以实现祖先组件向后代组件传递数据,并访问后代组件的属性和方法。

示例代码如下:

祖先组件:

<template>
  <ParentComponent></ParentComponent>
</template>
<script>
import ParentComponent from './ParentComponent.vue'
export default {
  provide() {
    return {
      showMessage: this.showMessage
    }
  },
  methods: {
    showMessage() {
      console.log('clicked')
    }
  },
  components: {
    ParentComponent
  }
}
</script>

父组件:

<template>
  <ChildComponent></ChildComponent>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
  components: {
    ChildComponent
  }
}
</script>

子组件:

<template>
  <div>{{ $attrs.message }}</div>
  <button @click="$attrs.showMessage">Click Me</button>
</template>

11. render函数

  • 使用render函数可以动态生成组件并传递数据。

示例代码如下:

<template>
  <div id="app"></div>
</template>
<script>
import Vue from 'vue'
new Vue({
  el: '#app',
  render(h) {
    return h('ChildComponent', {
      props: {
        message: 'Hello world'
      },
      on: {
        click: () => {
          console.log('clicked')
        }
      }
    })
  },
  components: {
    ChildComponent: {
      props: ['message'],
      render(h) {
        return h('div', this.message)
      }
    }
  }
})
</script>

以上就是关于“vue组件传值的11种方式总结”的详细攻略了,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue组件传值的11种方式总结 - Python技术站

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

相关文章

  • Vue.js 中的 v-show 指令及用法详解

    Vue.js 中的 v-show 指令及用法详解 v-show 是 Vue.js 中的一个指令,它可以控制元素的显示和隐藏。 语法 使用 v-show 指令可以将元素的显示状态与布尔值绑定,当绑定的布尔值为 true 时元素显示,为 false 时元素隐藏。 <div v-show="showElement"></div…

    Vue 2023年5月28日
    00
  • 详解Vue与element-ui整合方式

    下面是详解Vue和element-ui整合的完整攻略。 一、概念介绍 Vue.js是一款轻量级的渐进式JavaScript框架,而element-ui是基于Vue.js的一款UI组件库,我们可以使用Vue.js和element-ui来快速构建网站前端的用户界面。但是,如果没有好的整合方式,可能会造成重复工作和代码冗余等问题。因此,下面介绍如何将Vue.js和…

    Vue 2023年5月28日
    00
  • vuex 中辅助函数mapGetters的基本用法详解

    vuex 中辅助函数 mapGetters 的基本用法详解 简介 在 Vuex 中, state 存储着应用中的单一状态树。可以通过 store.state 来获取状态树中的属性。 但是,在有一些情况下,我们需要从 state 中派生一些状态,例如,过滤一些数据或者对数据进行计算,这时可以使用 Getter。Vuex 可以通过 Getter 快速派生出一些状…

    Vue 2023年5月28日
    00
  • ant design 日期格式化的实现

    Ant Design 日期格式化的实现 Ant Design 是蚂蚁金服开发的一套基于 React 的企业级 UI 组件库,其中包含了日期选择器和日期格式化工具。 日期格式化工具 Ant Design 中的日期格式化工具是基于 Moment.js 的 API 实现的。 Moment.js 是一个用于解析、验证、操作和显示日期以及时间的 JavaScript …

    Vue 2023年5月29日
    00
  • vue前端RSA加密java后端解密的方法实现

    要实现前端Vue使用RSA加密数据,后端Java进行解密的过程,需要完成以下步骤: 1.在前端Vue中引入RSA库 在前端Vue中,可以使用jsencrypt这个RSA库来实现加密。可以使用npm安装: npm install jsencrypt 然后,在Vue组件中引入: import JSEncrypt from ‘jsencrypt’ 2.在前端Vue…

    Vue 2023年5月28日
    00
  • vuecli中chainWebpack的常用操作举例

    下面是详细讲解”vuecli中chainWebpack的常用操作举例”的攻略: 什么是chainWebpack 在使用VueCLI创建的项目中,除了可以使用默认的配置之外,还可以自定义Webpack的一些配置。在Webpack的配置文件中,有一个configureWebpack选项,可以直接添加和修改Webpack的配置。而chainWebpack操作提供了…

    Vue 2023年5月27日
    00
  • vue脚手架vue-cli的学习使用教程

    Vue脚手架Vue-CLI的学习使用教程 Vue-CLI是Vue.js的官方脚手架工具,使我们可以非常方便地搭建Vue.js项目。下面我们将详细讲解Vue-CLI的学习使用教程。 安装 使用命令行工具打开终端,输入以下命令: npm install -g vue-cli 说明: npm:Node.js包管理器。 -g:全局安装。 vue-cli:Vue-CL…

    Vue 2023年5月27日
    00
  • vue路由划分模块并自动引入方式

    Vue 路由划分模块并自动引入方式可以让我们在开发过程中更加方便地管理和维护路由,以下是详细攻略: 划分模块 为了更好地管理路由,我们可以将相似的路由放置于同一文件夹中,比如: – src – pages – home – index.vue – children.vue – about – index.vue – children.vue 其中,home …

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