当前位置:   article > 正文

Vue~组件传值_el-button click怎么传递vue实例

el-button click怎么传递vue实例

项目开发中经常出现父子组件之间的嵌套关系,同时父子组件或者不同之间之间会出现一些数据传输需求;如编辑品牌数据,需要在弹窗中完成品牌数据的编辑操作;弹窗做为子组件,需要页面组件/父组件将需要编辑的数据传输给子组件进行操作;所以组件之间的数据传递是Vue项目中非常重要的一种操作方式

1,父子组件传值

解决方案:自定义属性

操作语法:props选项,自定义属性定义和传递

① 声明一个通过自定义属性接受数据的子组件Child1.vue,需要注意~自定义属性接受并使用父组件传递的数据,但是不能直接修改父组件传递的变量数据,称这种规范为 单向数据流

  1. <template>
  2. <div>
  3. <p>来自父组件的数据:{{ mfp }}</p>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. // 自定义属性,当前组件通过mfp,可以接受来自父组件的数据
  9. props: ['mfp']
  10. }
  11. </script>

② 父组件Home.vue中,操作子组件

  1. <template>
  2. <div>
  3. <!-- 使用子组件 -->
  4. <Child1 :mfp="msgFromParent"/>
  5. </div>
  6. </template>
  7. <script>
  8. // 引入子组件
  9. import Child1 from './child/Child1.vue'
  10. export default {
  11. data() {
  12. return {
  13. msgFromParent: '父组件数据'
  14. }
  15. },
  16. components: {
  17. // 注册子组件
  18. Child1
  19. }
  20. }
  21. </script>

2,子父组件传值

解决方案:自定义事件

操作语法:vm.$emit(自定义事件, 传递数据)

① 定义一个子组件,可以发送自定义事件,通过事件传递数据

  1. <template>
  2. <div>
  3. <p>当前组件数据:{{ msgFromChild }}</p>
  4. <button @click="sendData">发送数据给父组件</button>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. data() {
  10. return {
  11. msgFromChild: 'Child数据'
  12. }
  13. },
  14. methods: {
  15. sendData() {
  16. // 触发一个自定义事件
  17. this.$emit('devent', this.msgFromChild)
  18. }
  19. }
  20. }
  21. </script>

② 父组件中使用子组件,监听子组件的事件,接受子组件中传递的数据

  1. <template>
  2. <div>
  3. <p>子组件的数据:{{ mfc }}</p>
  4. <Child1 @devent="getData"/>
  5. </div>
  6. </template>
  7. <script>
  8. // 引入子组件
  9. import Child1 from './child/Child1.vue'
  10. export default {
  11. data() {
  12. return {
  13. mfc: '等待接受数据'
  14. }
  15. },
  16. methods: {
  17. getData(dat) {
  18. // 事件中接受子组件传递的数据
  19. this.mfc = dat
  20. }
  21. },
  22. components: {
  23. Child1
  24. }
  25. }
  26. </script>

3,组件之间传值

如果两个组件之间,父子嵌套关系比较复杂的情况下,通过父子/子父组件 传值的方式比较繁琐,我们可以通过自定义事件中心的方式完成数据的传递

① 创建一个事件中心

  1. import Vue from "vue"
  2. const vm = new Vue()
  3. // 导出一个空白对象
  4. export default vm

② 定义一个组件准备接受数据

  1. <template>
  2. <div>
  3. <p>接受其他组件的数据:{{ mfo }}</p>
  4. </div>
  5. </template>
  6. <script>
  7. // 导入事件中心
  8. import vm from '../../utils/events'
  9. export default {
  10. data() {
  11. return {
  12. mfo: '等待接受其他组件的数据'
  13. }
  14. },
  15. created() {
  16. // 事件中心监听其他组件是否发送了数据
  17. vm.$on('oevent', dat => {
  18. // 将数据保存起来
  19. this.mfo = dat
  20. })
  21. }
  22. }
  23. </script>

③ 其他组件通过事件中心发送数据

  1. <template>
  2. <button @click="sendDataToOther">
  3. 发送数据给其他组件
  4. </button>
  5. </template>
  6. <script>
  7. import vm from '../../utils/events'
  8. export default {
  9. data() {
  10. return {
  11. msgFromChild: 'Child1数据'
  12. }
  13. },
  14. methods: {
  15. sendDataToOther() {
  16. // 事件中心通过自定义事件 发送数据
  17. vm.$emit('oevent', this.msgFromChild)
  18. }
  19. }
  20. }
  21. </script>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/106191?site
推荐阅读
相关标签
  

闽ICP备14008679号