组件化
vue组件系统提供了一种抽象,让我们可以使用独立可复用的组件来构建大型应用,任意类型的应用界 面都可以抽象为一个组件树。组件化能提高开发效率,方便重复使用,简化调试步骤,提升项目可维护 性,便于多人协同开发。

组件通信常用方式
1. props
父给子传值
|
2. 自定义事件
子给父传值
|
3. 事件总线
任意两个组件之间传值常用事件总线 或 vuex的方式。
// Bus:事件派发、监听和回调管理 class Bus { |
实践中通常用Vue代替Bus,因为Vue已经实现了相应接口
4. vuex
创建唯一的全局数据管理者store,通过它管理数据并通知组件状态变更。
5. $parent/$root
兄弟组件之间通信可通过共同祖辈搭桥,
$parent或$root。
|
6. $children
父组件可以通过
$children访问子组件实现父子通信。
// parent |
7. $attrs/$listeners
包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 ( class 和 style 除外)。当一个组件没有 声明任何 prop 时,这里会包含所有父作用域的绑定 ( class 和 style 除外),并且可以通过
v- bind="$attrs"传入内部组件——在创建高级别的组件时非常有用。
|
8. refs
获取子节点引用
|
9. provide/inject
能够实现祖先和后代之间传值
|
实例
// index.vue |
// child1.vue |
// child2.vue |
插槽
插槽语法是Vue 实现的内容分发 API,用于复合组件开发。该技术在通用组件库开发中有大量应用
1. 匿名插槽
|
2. 具名插槽
将内容分发到子组件指定位置
|
3. 作用域插槽
分发内容要用到子组件中的数据
|
范例
// 子组件 Layout.vue |
//父组件 index.vue |
组件化实战
通用表单组件
收集数据、校验数据并提交。
实现KForm 指定数据、校验规则
KformItem
- label标签添加
- 执行校验
- 显示错误信息
KInput
- 维护数据
<template> |
**1. **KInput
// 创建components/form/KInput.vue |
- 使用KInput
创建components/form/index.vue,添加如下代码:
|
- 实现KFormItem
创建components/form/KFormItem.vue
<template> |
- 使用KFormItem
components/form/index.vue,添加基础代码:
|
- 实现KForm
<template> |
- 使用KForm
components/form/index.vue,添加基础代码:
< template > <div > <h3 > KForm表单 < /h3> |
- 数据校验
Input通知校验
onInput(e) { // ... |
FormItem监听校验通知,获取规则并执行校验
inject: ['form'], |
import Schema from "async-validator"; |
表单全局验证,为Form提供validate方法
validate(cb) { |
实现弹窗组件
弹窗这类组件的特点是它们在当前vue实例之外独立存在,通常挂载于body;它们是通过JS动态创建的,不需要在任何组件中声明。常⻅使用姿势
this.$create(Notice, { |
create函数
import Vue from "vue"; |
另一种创建组件实例的方式:
Vue.extend(Component)
const Ctor = Vue.extend(Component) |
通知组件
建通知组件,Notice.vue
<template> |
使用插件进一步封装便于使用,
create.js
import Notice from '@/components/Notice.vue' //... |