Vue通信组件之四:子组件向父组件传值

1、自定义事件 

     当子组件需要向父组件传递数据时,就要用到自定义事件。Vue的子组件用$emit()来触发事件,父组件用$on()来监听子组件的事件。父组件也可以直接在子组件的自定义标签上使用v-on来监听子组件触发的自定义事件。

使用要求:在子组件中通过$emit()把值传递给父组件,父组件使用v-on:xxx(或者使用语法糖@xxx);但是需要注意$emit()第一个参数是自定义事件的名称。

子组件内部通过this.$emit('方法名', 要传递的数据)方式,来调用父组件中的方法,同时把数据传递给父组件使用

<div id="app">
   <p>总数:{{total}} </p>
   <my-component  @increase=”handleGetTotal” @reduce= ”handleGetTotal”></my-component>
</div>
<script>
Vue.component('my-component' {
     template:`\
          <div >\
          <button @cl 工ck= ” handle Increase” > + l </button > \
          <button @click= ” handleReduce ” >- 1 < /button> \
          </div> `,
    data:function () {
            return {
                counter : 0
        },
    methods:{
        handleincrease: function () {
            this.counter++;
            this.$emit ('increase', this.counter);
       },
    handleReduce: function () {
            this.counter--;
            this.$emit('reduce', this.counter);
		}

});
var app =new Vue({
    el :’ #app ’,
    data: {
       total: 0
	}
    methods : {
        handleGetTotal: function (total) {
        this.total = total ;
    })
</script>

 

2、使用v-model

在父组件上使用v-model指令,子组件使用this.$emit('input',this.子组件属性)

      尽管Vue允许子组件去修改父组件数据,但在业务中,子组件应该尽量避免依赖父组件的数据,更不应该去主动修改它的数据,因为这样使得父子组件紧耦合,只看父组件,很难理解父组件的状态,因为它可能被任意组件修改,理想情况下,只有组件自己能修改它的状态。父子组件最好还是通过props和$emit来通信。

3、应用功说明

          原理:父组件将方法的引用,传递到子组件内部,子组件在内部调用父组件传递过来的方法,同时把要发送给父组件的数据,在调用方法的时候当作参数传递进去;
          父组件将方法的引用传递给子组件,其中,getMsg是父组件中methods中定义的方法名称,func是子组件调用传递过来方法时候的方法名称。

<son @func="getMsg"></son>

子组件内部通过this.$emit('方法名', 要传递的数据)方式,来调用父组件中的方法,同时把数据传递给父组件使用。
 

<div id="app">
    <!-- 引用父组件 -->
    <son @func="getMsg"></son>

    <!-- 组件模板定义 -->
    <script type="x-template" id="son">
      <div>
        <input type="button" value="向父组件传值" @click="sendMsg" />
      </div>
    </script>
  </div>

  <script>
    // 子组件的定义方式
    Vue.component('son', {
      template: '#son', // 组件模板Id
      methods: {
        sendMsg() { // 按钮的点击事件
          this.$emit('func', 'OK'); // 调用父组件传递过来的方法,同时把数据传递出去
        }
      }
    });

    // 创建 Vue 实例,得到 ViewModel
    var vm = new Vue({
      el: '#app',
      data: {},
      methods: {
        getMsg(val){ // 子组件中,通过 this.$emit() 实际调用的方法,在此进行定义
          alert(val);
        }
      }
    });
  </script>

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Vue 中,组件之间的通信可以通过父组件之间的 props 和自定义事件实现。 组件向父组件传值的方式有以下两种: 1. 通过 $emit 触发自定义事件 组件可以通过 $emit 方法触发一个自定义事件,并且可以递参数。父组件可以通过 v-on 指令监听该事件,并且在事件处理函数中接收组件递的参数。 组件代码: ``` <template> <button @click="handleClick">触发事件</button> </template> <script> export default { methods: { handleClick() { this.$emit('custom-event', 'hello') } } } </script> ``` 父组件代码: ``` <template> <div> <child-component @custom-event="handleCustomEvent"></child-component> <p>{{ message }}</p> </div> </template> <script> import ChildComponent from './ChildComponent' export default { components: { ChildComponent }, data() { return { message: '' } }, methods: { handleCustomEvent(data) { this.message = data } } } </script> ``` 2. 通过 props 递数据 父组件可以通过 props 向组件递数据,组件可以通过 props 接收父组件递的数据。父组件可以在组件上使用 v-bind 指令绑定数据,组件可以在 props 中声明接收的属性。 组件代码: ``` <template> <div>{{ message }}</div> </template> <script> export default { props: ['message'] } </script> ``` 父组件代码: ``` <template> <div> <child-component :message="message"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent' export default { components: { ChildComponent }, data() { return { message: 'hello' } } } </script> ``` ### 回答2: 在Vue中,组件向父组件传值可以通过事件实现。 首先,在组件中定义一个事件,通过`$emit`方法触发该事件,并递需要递的。例如: ```JavaScript // 组件 methods: { handleClick() { this.$emit('childEvent', '递给父组件'); } } ``` 然后,在父组件中引入组件,并在组件上监听该事件。当组件触发事件时,父组件中的方法将会被调用,并且可以获取组件递的。例如: ```HTML <!-- 父组件 --> <template> <div> <child-component @childEvent="handleChildEvent"></child-component> <p>从组件递过来的:{{ childValue }}</p> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { components: { ChildComponent }, data() { return { childValue: '' }; }, methods: { handleChildEvent(value) { this.childValue = value; } } } </script> ``` 当点击组件中的按钮时,`handleClick`方法会被调用,然后通过`$emit`触发`childEvent`事件,并递一个。父组件中的`handleChildEvent`方法会接收到这个,并将其赋给`childValue`。这样,就完成了组件向父组件传值的过程。 ### 回答3: 在Vue中,组件向父组件传值可以通过事件来实现。具体步骤如下: 1. 在组件中使用$emit方法触发一个事件,并递需要递的。例如,在组件的某个方法中使用this.$emit('eventName', value)来触发名为"eventName"的事件,并将value作为参数递。 2. 在父组件中,使用v-on指令监听组件触发的事件,绑定一个事件处理函数。例如,在父组件的模板中可以使用v-on:eventName="handleEvent"来监听名为"eventName"的事件,并将事件递到名为"handleEvent"的方法中处理。 3. 在父组件的方法中,通过形参获取组件递的。例如,在handleEvent方法中可以使用value作为参数接收组件递的。 通过以上步骤,组件就可以将需要递的通过事件递给父组件了。 需要注意的是,在组件向父组件传值时,父组件必须通过v-on指令监听组件触发的事件,如果不监听则无法接收递的。此外,事件名可以自定义,但要保持父组件中保持一致。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值