vue中组件之间传值的问题(父传子、子传父、兄弟组件)

1.父传子

<body>
	<div id="app">
		<father></father>
	</div>
	<script>
	//父传子
	Vue.component("father",{
		template:"<div >父元素  --> <son :getFatherValueIs='fatherValue'></son></div>",
		data(){
			return{
				fatherValue:"father"
			}
		},
		components:{
			son:{
				props:["getFatherValueIs"],
				template:"<span>子元素获取的父元素的值为{{getFatherValueIs}}</span>"
			}
		}
	})
	
	var vm=new Vue({
		el:"#app",
		
	})
	</script>
</body>

2.子传父

  <body>
    <div id="app">
      <father></father>
    </div>
    <script>
      
      Vue.component('father', {
        template: `
                        <div>
                          <p>当前父组件获取子组件的值为:{{mySonName}}</p>
                          <son @tellFatherMyname="getMySonName"></son>
                        </div>
        `,
        data () {
          return {
            mySonName: '***'
          }
        },
        methods: {
          // 这个函数中有一个默认参数,该参数就表示上传上来的值
          getMySonName (data) {
            this.mySonName = data
          }
        },
        components: {
          son: {
            data () {
              return {
                myName: '小星星'
              }
            },
            template: '<button @click="emitMyname">点击就传值给阀组件我的值{{myName}}</button>',
            methods: {
              emitMyname () {
                // 子组件传值给父组件需要用到$emit()方法,这个方法可以传递两个参数,一个是事件名称,一个是需要传递的数据
                // 触发this.$emit()方法
                // 参数一 是一个自定义的事件名称
                // 参数二 就是需要发送给父组件的数据
                // 发布-订阅者模式
                // 子组件就是发布者
                // 发布者需要发布一个消息 消息携带数据
                this.$emit('tellFatherMyname', this.myName)
              }
            }
          }
        }
      })
      var vm = new Vue({
        el: '#app',
        data: {

        }
      })
    </script>
  </body>

3.兄弟组件之间的传值

 <body>
    <div id="app">
      <father></father>
    </div>
    <script>
      // eventbus 事件总线 
      // eventbus 也是用到的发布-订阅者模式
      // 使用一个公共的vue实例作为中介 
      // 这个中介只负责数据的传输 不会挂载新的数据
      // 需要传递数据的组件调用bus.$emit('消息名称','需要发送的数据')
      // 需要接收数据的组件调用bus.$on('事件名称','事件处理函数')   事件名称 和 消息名称 同名
      // 创建一个空的vue实例,作为事件总线
      var eventbus = new Vue()

      Vue.component('father', {
        template:`
                    <div>
                      <son></son>
                      <daughter></daughter>
                    </div>
        `,
        components: {
          son: {
            data () {
              return {
                mySisterName: '???'
              }
            },
            template: '<span>我妹妹告诉我她叫{{mySisterName}}</span>',
            mounted () {
              // 通过eventbus的$on()方法去监听兄弟节点发射过来的事件
              // $on有两个参数,一个是事件名称,一个是函数,该函数的默认值就是传递过来的数据
              eventbus.$on('tellBroMyName', data => {
                this.mySisterName = data
              })
            }
          },
          daughter: {
            data () {
              return {
                myName: '兰兰'
              }
            },
            template: '<button @click="emitMyName">点击就告诉哥哥我叫{{myName}}</button>',
            methods: {
              emitMyName() {
                // 通过事件总线发射一个事件名称和需要传递的数据
                eventbus.$emit('tellBroMyName', this.myName)
              }
            }
          }
        }
      })
      var vm = new Vue({
        el: '#app',
        data: {

        }
      })
    </script>
  </body>

 

Vue,父组件组件传递数据是通过props来实现的。而组件向父组件传递数据,则需要通过自定义事件来实现。 首先,在父组件,通过props属性将数据传递给组件。可以在组件标签上使用v-bind指令来动态绑定父组件的数据,或者直接在组件标签上写入固定的值。 例如,在父组件定义一个名为message的prop,并将一个字符串传递给组件: ```vue <template> <div> <child-component :message="parentMessage"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentMessage: 'Hello from parent' }; } }; </script> ``` 然后,在组件,可以通过props属性接收父组件传递过来的数据,并在模板使用该数据。 ```vue <template> <div> <p>{{ message }}</p> <button @click="sendMessageToParent">Send Message to Parent</button> </div> </template> <script> export default { props: ['message'], methods: { sendMessageToParent() { this.$emit('custom-event', 'Message from child'); } } }; </script> ``` 在组件,可以使用`props`属性声明接收的属性名,然后在模板直接使用即可。另外,如果需要向父组件发送数据,可以使用`$emit`方法触发一个自定义事件,并传递需要发送的数据。 最后,在父组件,可以通过在组件标签上监听自定义事件来接收组件传递的数据。 ```vue <template> <div> <child-component :message="parentMessage" @custom-event="receiveMessageFromChild"></child-component> <p>Message received from child: {{ childMessage }}</p> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { parentMessage: 'Hello from parent', childMessage: '' }; }, methods: { receiveMessageFromChild(message) { this.childMessage = message; } } }; </script> ``` 这样,就完成了组件向父组件传递数据的过程。当组件的按钮被点击时,将会触发`custom-event`事件,并将消息发送给父组件,父组件接收到消息后,将其保存在`childMessage`变量,并在模板进行展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值