Vue组件和组件通信

Vue组件和组件通信

一.Vue组件概念, 创建注册使用; 封装组件

  • 概念 :

    组件是可复用的Vue 实例, 一个vue文件就是一个组件

    组件化 :封装的思想,把页面上 可重用的部分 封装为 组件,从而方便项目的开发和维护

    一个页面,可以拆分成一个个组件,一个组件就是一个整体, 每个组件可以有自己独立, 互不影响

    口诀: 哪部分标签复用, 就把哪部分封装到组件内

    组件内template只能有一个根标签

    组件内data必须是一个函数, 独立作用域

  • 组件创建, 注册, 使用

    在components文件夹下创建组件, 文件后缀为

    .vue

    创建后需要注册后再使用

    有两种注册方式全局和局部

    1.全局注册:

    全局入口在main.js, 在new Vue之上注册

    语法:

    import Vue from 'vue'
    import 组件对象 from 'vue文件路径'
    
    Vue.component("组件名", 组件对象)
    

    2.局部注册的方式:

    import 组件对象 from 'vue文件路径'
    
    export default {
        components: {
            "组件名": 组件对象
        }
    }
    

    注册名用驼峰命名

    调用组件

    <template>
      <div>
        <!-- 4. 组件名当做标签使用 -->
        <组件名></组件名>
        <组件名></组件名>
      </div>
    </template>
    
    <script>
    // 目标: 局部注册 (用的多)
    // 1. 创建组件 - 文件名.vue
    // 2. 引入组件
    import Pannel from './components/组件名
    export default {
      components: {
        "组件名": 组件对象
      }
    }
    </script>
    

组件使用总结:

  1. (创建)封装html+css+vue到独立的.vue文件中
  2. (引入注册)组件文件 => 得到组件配置对象
  3. (使用)当前页面当做标签使用
  • vue组件-scoped作用

    在style上加入scoped属性, 就会在此组件的标签上加上一个随机生成的data-v开头的属性, 且组件内的样式只在当前vue组件生效

<style scoped>

二. Vue组件通信

1.父传子

首先明确父和子是谁, 在父引入子 (被引入的是子

示例:

父: App.vue

子: Son.vue

创建 Son.vue

步骤一. 子组件内, 定义变量, 准备接收, 然后使用变量

<template>
  <div>
    <h3>姓名: {{ name }}</h3>
    <p>年龄: {{ age }}</p>
    <p>身高: {{ height }}</p>
  </div>
</template>

<script>
export default {
  props: ["name", "age", "height"],
};
</script>

步骤二. 父组件(App.vue)内, 要展示封装的子组件(Son.vue) 引入组件, 注册组件, 使用组件,

<template>
  <div>
    <Son name="大头儿子" age='4' :height="msg"></Son>
  </div>
</template>

<script>
import Son from './components/Son.vue'
export default {
  data(){
    return{
      msg:'0.5m'
    }
  },
  components:{
    Son
  }
};
</script>

什么时候需要父传子技术?

从一个vue组件里把值传给另一个vue组件(父->子)

父传子口诀(步骤)是什么?

子组件内, props定义变量, 在子组件使用变量父组件内, 使用子组件, 属性方式给props变量传值

直接在子组件中修改父组件传递过来的数据, 项目会报错

原因: 子组件修改, 不通知父级, 造成数据不一致性

vue 规定了props中的变量"只读" (也就是只能拿来渲染, 不能修改), 修改了会造成父子组件数据不一致

从父到子的数据流向就是单项数据流

那子组件如何才能修改父组件里的数据呢?

2.子传父

1.子组件内,当用户触发比如,点击按钮 的时候,自定义一个事件,并将数据通过该事件传递出去。

2.父组件内, 绑定子组件中的自定义事件和事件处理函数 语法: @自定义事件名=“父methods里函数名”

3.兄弟传值

组件通信-EventBus

常用于跨组件通信时使用

语法:

src/EventBus/index.js – 创建空白Vue对象并导出

在要传递值的组件(a.vue)

  • eventBus.$emit(‘事件名’, 值)

在要接收值的组件(b.vue)

  • eventBus.$on(‘事件名’, 函数体)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值