4.1 简单轮子 VueContainer 布局组件
[toc]
需求分析
- 实现常用布局
- 三栏布局
- 中栏 左侧菜单栏
- 中栏 右侧菜单栏
- 左右两栏布局 左侧菜单栏
API设计
VueMain.vueVueContainer.vuewidth
VueHeader.vueheight
VueHeader.vueVueFooter.vueVueAside.vuewidth
组件UI结构
可嵌套的
<v-layout>1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36<!-- 三栏布局 --> <v-layout> <v-header></v-header> <v-content></v-content> <v-footer></v-footer> </v-layout> <!-- 三栏布局 中栏 左侧菜单栏 --> <v-layout> <v-header></v-header> <v-layout> <v-sider></v-sider> <v-content></v-content> </v-layout> <v-footer></v-footer> </v-layout> <!-- 三栏布局 中栏 右侧菜单栏--> <v-layout> <v-header></v-header> <v-layout> <v-content></v-content> <v-sider></v-sider> </v-layout> <v-footer></v-footer> </v-layout> <!-- 左右两栏布局 左侧菜单栏 --> <v-layout> <v-sider></v-sider> <v-layout> <v-header></v-header> <v-content></v-content> </v-layout> <v-footer></v-footer> </v-layout>重复使用
<v-layout>作为嵌套容器,相当于div标签
组件代码
- 分别创建组件
VueContainer.vueVueMain.vueVueHeader.vueVueAside.vueVueFooter.vue
- 全局注册组件
Vue.component('v-container', VueContainer)Vue.component('v-main', VueMain)Vue.component('v-header', VueHeader)Vue.component('v-asider', VueAside)Vue.component('v-footer', VueFooter)
- IDE 自动导入
import VueContainer from ...
./src/components/layout/VueContainer.vue
|
|
- 其他组件结构类似
LayoutGroups.vue
|
|
父子组件嵌套时创建和挂载的顺序
父子组件嵌套时,父组件视图和子组件视图在页面中渲染谁先谁后?
- 不确定
- 子组件先于父组件
mounted - 所有子孙组件都
mounted后,根(父)组件最后mounted到页面中
测试的顺序
- 父组件
beforeCreated - 父组件
created- 子组件
beforeCreated - 子组件
created - 孙组件…递归查找
- 子组件
mounted
- 子组件
- 父组件
mounted - …
父子组件嵌套时,所有组件视图都渲染完成后再执行回调操作
|
|
组件name属性的作用
- 使用浏览器vue插件时可以直接看到组件原来的命名,而不是直接显示HTML标签名
- 组件的实例中的
name属性- 可以通过判断是否存在特定的
name,从而来实现相应的逻辑
- 可以通过判断是否存在特定的
打印出
VueContainer.vue中,所有子组件的name属性
|
|
实现判断子组件中有VueAside,方向变为row
- 获取子组件的集合(数组)
this.$children
VueContainer.vue
|
|
单元测试
- 无