Vue2学习(4)vue组件生命周期+组件之间数据共享

Vue组件的生命周期

生命周期(Life Cycle)是指一个组件从创建 -->运行 --> 销毁的整个阶段。

生命周期函数:是由 vue 框架提供的内置函数,会伴随着组件的生命周期,自动按次序执行。

(下面图片来自网络)

请添加图片描述

组件之间的数据共享
  • 父组件向子组件共享数据(使用自定义属性即props)
//父组件--APP.vue
<template>
  <div class="app-container">
    <h1>App根组件 --- {{ countFromSon }}</h1>
    <p>{{ userinfo }}</p>
    <hr />

    <div class="box">
      <!-- 渲染 Left 组件-->
      <Left :msg="message" :user="userinfo"></Left>
    </div>
  </div>
</template>

<script>
import Left from '@/components/Left.vue'

export default {
  data() {
    return {
      message: 'GDUF-LoverMaker',
      userinfo: { name: 'lizhi', age: 22 },
      countFromSon: 0
    }
  },
  components: {
    Left
  }
}
</script>
//子组件--Left.vue
<template>
  <div class="left-container">
    <h3>Left 组件</h3>
    <p>msg 的值是:{{ msg }}</p>
    <p>user 的值是:{{ user }}</p>
  </div>
</template>

<script>

export default {
  props: ['msg', 'user'],//自定义属性,父组件向子组件共享数据
}
</script>

  • 子组件向父组件共享数据

    子组件向父组件共享数据使用自定义事件

    $.emit(event,val)

    //父组件APP.vue
    
    <template>
      <div id="app">
    
      <p>父组件中的countFromSon:  {{ countFromSon }}</p>
     
          //使用自定义事件,还要在父组件中定义函数即getCount函数
      <First :msg="message" @numChange="getCount"></First>
    
      </div>
    </template>
    
    <script>
    import First from '@/components/First.vue'
    
    export default {
      data() {
          return {
            message: 'Best wishes!',
            countFromSon: 0
          }
      },
      components: {
        // HelloWorld,
       First
      },
      methods: {
        //定义方法接受子组件的count值
        getCount(val){
            this.countFromSon = val
        }
      }
    }
    </script>
    
    <style lang="less">
    #app {
      font-family: Avenir, Helvetica, Arial, sans-serif;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
      // text-align: center;
      color: #2c3e50;
      margin-top: 60px;
    }
    </style>
    
    
    //子组件First.vue
    <template>
      <div>
          <h5>子组件</h5>
          <p>父组件传递过来的值:{{ msg }}</p>
          <hr>
    
          <p>子组件中的count: {{ count }}</p>
          <button @click="add">子组件按钮</button>
      </div>
    </template>
    
    <script>
    export default {
        props: ['msg'], //从父组件接收msg数据
        data() {
          return {
            count: 0,
          }
        },
        methods:{
          add(){
            this.count++
            //自定义事件
            this.$emit('numChange',this.count)
          }
        }
    
    }
    </script>
    
    <style>
    
    </style>
    
  • 兄弟组件之间的数据共享

    在 vue2.x 中,兄弟组件之间数据共享的方案是 EventBus。

    • 在components创建eventsBus.js,并向外共享一个Vue实例对象
    • 在数据发送方,调用bus.$emit(‘事件名’,要发送的数据) 方法触发自定义事件
    • 在数据的接收方,调用bus.$on(‘事件名’,事件处理函数) 方法注册一个自定义事件。
    • 代码实现如下
//eventBus.js

import Vue from 'vue'

//向外共享Vue实例对象
export default new Vue()
//兄弟组件一:Second.vue
<template>
  <div>
  <button @click="sendMsg">数据发送方</button>
  </div>
</template>

<script>
    
import bus from '@/components/eventBus'
export default {
    data() {
        return {
            msg: 'Best wishes!'
        }
    },
    methods: {
        sendMsg() {
            //发送数据
            bus.$emit('share', this.msg)
        }
    }
}
</script>

<style>
</style>
//兄弟组件二:Third.vue
<template>
<div>
  <p>从Second接收的数据:{{ msgFromSecond }}</p>
</div>
</template>

<script>
import bus from '@/components/eventBus'
export default {
    data() {
        return {
            msgFromSecond: ''
        }
    },
    created() {
        //接收数据
        bus.$on('share',val =>{
            this.msgFromSecond = val
        })
    }
}
</script>

<style>

</style>

(最后在APP.vue注册Second和Third两个组件,点击数据发送按钮,成功显示接收的数据)

请添加图片描述
点击后:
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于Vue学习感受,我觉得它是一个非常强大且易于使用的前端框架。以下是我对Vue的一些学习感受: 1. 监听器(Watchers):Vue的监听器允许你观察数据的变化并执行相应的操作。这对于处理数据的变化非常有用,例如在数据更新时执行一些逻辑或者发送网络请求。Vue的监听器让我感到很方便,可以轻松地跟踪数据的变化。 2. 生命周期钩子(Lifecycle Hooks):Vue提供了一系列的生命周期钩子函数,用于在组件生命周期各个阶段执行自定义的代码逻辑。这些钩子函数包括`created`、`mounted`、`updated`等等。通过生命周期钩子函数,我可以在组件的不同阶段执行一些初始化、数据请求或清理的操作。 3. 组件通信:Vue提供了多种组件通信的方式,包括父子组件间的props和事件,以及兄弟组件间的事件总线、Vuex等。这使得组件间的数据传递和通信变得非常灵活和方便。我发现使用这些机制可以很容易地实现组件间的数据共享和通信。 4. 路由(Vue Router):Vue Router是Vue官方提供的路由管理器,它允许我们在应用中实现页面之间的跳转和导航。Vue Router提供了诸多功能,例如路由参数、动态路由、嵌套路由等等。学习和使用Vue Router使得我能够轻松地构建单页应用,并实现页面间的切换和导航。 总的来说,我对Vue学习感受非常积极。它提供了丰富的功能和简洁的语法,使得我能够快速构建出高质量的前端应用。同时,Vue的文档和社区也非常活跃,这让我在学习和使用Vue时能够获得很多帮助和支持。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GDUF-LZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值