vue--组件之间传值

一、父组件给子组件传值

  1. 子组件(Logo.vue)在props中创建一个用来接收父组件传来的值的属性(logoName)
  2. 在父组件(Dad.vue)中注册子组件,并在子组件标签中添加子组件中创建的属性
  3. 把要传给子组件的值(nameOfLogo)赋给该属性(logoName)

子组件:

<template>
  <div class="logo" @click="show(logoName)">
  </div>
</template>

<script>
export default {
  name: 'Logo',
  data () {
    return {
    }
  },
  props: ['logoName'],
  methods: {
    show (msg) {
      console.log('logoName', msg)
    }
  }
}
</script>
<style scoped>
</style>

父组件:

<template>
  <div>
    <Logo :logoName="nameOfLogo"></Logo>
  </div>
</template>

<script>
import Logo from '../components/Logo'
export default {
  name: 'Dad',
  data () {
    return {
      nameOfLogo: 'logo滴名字'
    }
  },
  components: {
    Logo
  }
  }
}
</script>
<style scoped>
</style>

在Dad.vue的页面上点击logo组件:
在这里插入图片描述

二、子组件给父子间传值

  1. 子组件中点击事件等方法来触发一个自定义事件
  2. 自定义事件中使用this.$emit()方法,传递两个参数,第一个是父组件绑定的方法名,第二个参数是要传递的参数
  3. 在父组件中注册子组件并在子组件标签上绑定对自定义事件的监听

子组件:

<template>
  <div class="logo" @click="toDadData()">
  </div>
</template>

<script>
export default {
  name: 'Logo',
  data () {
    return {
    	msg: '子组件logo给Dad传的文本'
    }
  },
  methods: {
    show () {
      this.$emit('func', this.msg)
    }
  }
}
</script>
<style scoped>
</style>

父组件

<template>
  <div>
    <Logo @func="getName"></Logo>
  </div>
</template>

<script>
import Logo from '../components/Logo'
export default {
  name: 'Dad',
  data () {
    return {
      nameOfLogo: 'logo滴名字'
    }
  },
  methods: {
    getName (msg) {
      let logoTest =  msg
      console.log(logoTest)
    },
  }
  components: {
    Logo
  }
  }
}
</script>
<style scoped>
</style>

在Dad.vue的页面上点击logo组件:
在这里插入图片描述

三、两个子组件A、B之间传值需要先从子组件A向父组件传值,再由父组件向子组件B传值。

四、通过route带参传递,详见:https://blog.youkuaiyun.com/she_jw/article/details/105951285

五、通过vue的转台管理工具vuex传值(很方便)

Vue.js通过自定义事件实现子组件向父组件的方法如下: 1. **子组件触发自定义事件并**:在子组件中,使用`this.$emit`方法触发一个自定义事件,并将需要递的作为参数递给该事件。例如在下面的子组件代码中,当点击`<h1>`元素时,会触发`changeTitle`方法,在该方法中使用`this.$emit`触发了自定义事件`titleChanged`,并递了“子向父组件”: ```vue <template> <header> <h1 @click="changeTitle">{{title}}</h1> </header> </template> <script> export default { name: 'app-header', data() { return { title: "Vue.js Demo" } }, methods: { changeTitle() { this.$emit("titleChanged", "子向父组件"); } } } </script> ``` 2. **父组件监听自定义事件并接收**:在父组件中,使用`v-on`指令(缩写为`@`)监听子组件触发的自定义事件,并在对应的方法中接收递过来的。例如在下面的父组件代码中,使用`v-on:titleChanged="updateTitle"`监听子组件的`titleChanged`事件,当事件触发时会调用`updateTitle`方法,在该方法中接收递过来的并更新`title`数据: ```vue <template> <div id="app"> <app-header v-on:titleChanged="updateTitle"></app-header> <h2>{{title}}</h2> </div> </template> <script> import Header from "./components/Header" export default { name: 'App', data() { return { title: "递的是一个" } }, methods: { updateTitle(e) { this.title = e; } }, components: { "app-header": Header, } } </script> ``` 另外还有一个示例,在子组件`Header.vue`中,点击按钮会触发`sendParent`方法,该方法使用`this.$emit`触发自定义事件`send`并递`msg`的: ```vue <template> <h2> 头部组件--- <button @click="sendParent">执行父组件的自定义事件</button> </h2> </template> <script> export default { name: "", data() { return { msg: "头部组件" } }, methods: { sendParent() { console.log("触发自己的方法~!"); this.$emit("send", this.msg); } } } </script> <style scoped> h2 { text-align: center; background: #000000; color: #fff; } </style> ``` 父组件则需要监听`send`事件来接收递的 [^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值