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>
<组件名></组件名>
<组件名></组件名>
</div>
</template>
<script>
import Pannel from './components/组件名
export default {
components: {
"组件名": 组件对象
}
}
</script>
组件使用总结:
- (创建)封装html+css+vue到独立的.vue文件中
- (引入注册)组件文件 => 得到组件配置对象
- (使用)当前页面当做标签使用
-
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)
在要接收值的组件(b.vue)
|