Vue2——父子组件间的调用

1、父组件给子组件传值使用props

父组件:
<div>
    <SonPage  msg="通过props传递值---父=>子" ></SonPage>
    <h1>父组件</h1>
  </div>
子组件
<div :style="{border: '1px solid red'}">
  <h1>子组件</h1>

  <div>我是父组件传入的参数:{{ msg }}</div>
</div>
<script>
export default {
  props: {
    msg: {
      type: String,
    }
  },
  name: "SonPage",
}
</script>

2、父组件调用子组件方法

父组件

使用 this.$refs.sonRef.子组件方法名。父组件在使用子组件时要加ref,上下一致

<template>
  <div>
    <SonPage ref="sonRef" ></SonPage>
    <h1>父组件</h1>
    <button @click="opSon">我要调用子组件</button>
  </div>
</template>

<script>
import SonPage from "@/views/SonPage";

export default {
  name: "pPage",
  components: {SonPage},
 
  methods: {
    opSon() {
      this.$refs.sonRef.ParentOpSon("我是父组件调用子组件方法传入的参数");
    },
  },
}
</script>
子组件
<template>
  <div :style="{border: '1px solid red'}">
    <h1>子组件</h1>
    <div>这里是父组件调用子组件方法传入的参数:{{ msg2 }}</div>
  </div>
</template>

<script>
export default {
  name: "SonPage",
  data() {
    return {
      msg2: ""
    }
  },
  methods: {
    ParentOpSon(parentMsg) {
      this.msg2 = parentMsg;
    },
  },
}
</script>

<style scoped>

</style>
结果:

3、子组件调用父组件方法

父组件

使用子组件标签上加@【子组件的this.$emit中第一个参数名】。方法使用 e就是子组件的参数

<template>
  <div>
    <SonPage @opParent="parentMethod"></SonPage>
    <h1>父组件</h1>
    <div>我是子组件调用父组件方法传入的参数{{ sonMsg }}</div>
  </div>
</template>
<script>
import SonPage from "@/views/SonPage";

export default {
  name: "pPage",
  components: {SonPage},
  data() {
    return {
      sonMsg: ""
    }
  },
  methods: {
    parentMethod(e) {
      console.log(e);
      this.sonMsg = e;
    }
  },

}
</script>

<style scoped>

</style>
子组件

子组件中使用this.$emit("父组件标签上的@的名"," 调用父组件方法的参数")

<template>
  <div :style="{border: '1px solid red'}">
    <h1>子组件</h1>
    <button @click="opParent">我要调用父组件的方法</button>
  </div>
</template>

<script>
export default {
  name: "SonPage",
  data() {
    return {
      msg2: ""
    }
  },
  methods: {
    opParent() {
      this.$emit("opParent", "我是子组件调用父组件方法传入的参数")
    }
  },
}
</script>

<style scoped>

</style>
结果:

三种传值方法都是比较常用的

整理不全面,多多指教~

### Vue 2Vue 3 父子组件生命周期执行顺序 在 Vue.js 的开发过程中,父子组件的生命周期钩子函数执行顺序是非常重要的一部分。以下是关于 **Vue 2** 和 **Vue 3** 中父子组件生命周期的具体执行顺序及其主要区别的说明。 #### Vue 2 生命周期执行顺序 在 Vue 2 中,父子组件的生命周期钩子按照以下顺序依次触发: 1. 父组件 `beforeCreate` 阶段被调用[^1]。 2. 父组件进入 `created` 阶段并完成初始化操作。 3. 父组件进入 `beforeMount` 阶段,在此阶段模板编译尚未完成。 4. 子组件开始其生命周期流程,先进入 `beforeCreate` 阶段[^2]。 5. 子组件随后进入 `created` 阶段。 6. 子组件继续到 `beforeMount` 阶段。 7. 子组件最终到达 `mounted` 阶段,此时 DOM 已经挂载完毕。 8. 返回父组件父组件完成最后一步 `mounted` 阶段。 总结来说,Vue 2 的执行顺序为: **父 beforeCreate → 父 created → 父 beforeMount → 子 beforeCreate → 子 created → 子 beforeMount → 子 mounted → 父 mounted** --- #### Vue 3 生命周期执行顺序 Vue 3 对于父子组件的生命周期执行顺序进行了调整,具体如下: 1. 父组件先触发 `setup()` 函数(如果存在),这是 Vue 3 新增的一个组合式 API 方法[^3]。 2. 接着父组件会触发 `beforeCreate` 钩子(尽管该钩子已逐渐被淘汰)[^3]。 3. 然后父组件进入 `created` 阶段[^3]。 4. 此时,子组件开始自己的生命周期流程,先进入 `setup()` 函数(如果有定义的话)[^3]。 5. 子组件接着触发 `beforeCreate` 和 `created` 阶段[^3]。 6. 子组件再进入 `beforeMount` 阶段[^3]。 7. 子组件完成后进入 `mounted` 阶段,DOM 被成功挂载[^3]。 8. 最终返回父组件父组件完成剩余部分,即 `beforeMount` 和 `mounted` 阶段[^3]。 因此,Vue 3 的执行顺序可以概括为: **父 setup() → 父 beforeCreate → 父 created → 子 setup() → 子 beforeCreate → 子 created → 子 beforeMount → 子 mounted → 父 beforeMount → 父 mounted** --- #### 主要区别分析 通过对比 Vue 2Vue 3 的生命周期执行顺序可以看出以下几个显著的区别: 1. **新增 `setup()` 钩子**:Vue 3 引入了新的组合式 API —— `setup()`,它会在其他任何生命周期之前运行,主要用于替代 Options API 并提供更灵活的功能支持[^3]。 2. **移除/弱化某些旧有钩子**:虽然 Vue 3 还保留了像 `beforeCreate` 和 `created` 这样的传统选项式 API 钩子,但由于有了 `setup()`,这些钩子的作用范围变得有限甚至可能完全不用[^3]。 3. **整体逻辑更加清晰分离**:相比起 Vue 2 将所有工作都集中在一个地方处理的方式,Vue 3 更加注重模块化的理念设计,使得代码结构更为合理有序[^3]。 --- ```javascript // 示例代码展示 Vue 3 组件中的 lifecycle 使用方式 <script> export default { setup() { console.log('Parent Setup'); return {}; }, beforeCreate() { console.log('Parent Before Create'); }, created() { console.log('Parent Created'); } } </script> <template> <div id="app"> <child-component></child-component> </div> </template> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值