vue父组件向子组件传值,父子组件相互调用。

 <template>
   <div>
<!-- 配置问题弹窗 -->
    <el-dialog :title="title" :visible.sync="saw" width="1000px" append-to-body>
      <question-bank 
        ref="questionBank"     
        :exampaperId="exampaperId"        //父组件给子组件传值
         @exampaperQuestionGetList="getList"    //自组件调用父组件方法
    ></question-bank>
    </el-dialog>

  </div>
</template>

<script>
import { listExampaperQuestion, getExampaperQuestion, delExampaperQuestion, addExampaperQuestion, updateExampaperQuestion } from "@/api/active/question/exampaperQuestion";

//引入组件
import QuestionBank from "@/views/active/question/exampaper/questionBank.vue";  

export default {
  name: "ExampaperQuestion",
  components: {QuestionBank},    //组件名
  props: {
    exampaperId: String,    //接收父组件传值
  },

代码如图所示。

1.  父组件调用子组件方法:this.$refs.questionBank.getList(); 直接使用会报this.$refs.questionBank is undefined 错误。

错误原因:子组件getList方法没渲染完。

解决:使用this.$nextTick()方法。

this.$nextTick(() => {
    this.$refs.questionBank.getList();
});

2.  子组件调用父组件方法:this.$emit('方法名',参数(参数可有可无))。

例如:无参:this.$emit('exampaperQuestionGetList'); 

           有参:this.$emit('exampaperQuestionGetList','1' ); 

### 回答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、付费专栏及课程。

余额充值