当前位置:   article > 正文

element-ui element-plus container header footer aside mian - 分析_element ui plus container footer

element ui plus container footer

源代码地址 - container
源代码地址 - header
源代码地址 - footer
源代码地址 - aside
源代码地址 - main

version:element-plus 1.0.1-beta.0

container

<template>
  <section class="el-container" :class="{'is-vertical': isVertical}">
    <slot></slot>
  </section>
</template>
  • 1
  • 2
  • 3
  • 4
  • 5
<script lang="ts">
import { defineComponent, computed, VNode, Component } from 'vue'

export default defineComponent({
  name: 'ElContainer',
  props: {
    // 子元素的排列方向
    direction: {
      type: String,
      default: '',
    },
  },
  setup(props, { slots }) {
    const isVertical = computed(() => {
      // 如果设置了props.direction 是垂直方向 那么返回true
      if (props.direction === 'vertical') {
        return true
      } else if (props.direction === 'horizontal') {
        // 水平方向返回false
        return false
      }
      // 没有设置或者说不是两种之一
      // 传入插槽
      if (slots && slots.default) {
        const vNodes: VNode[] = slots.default()
        // 判断插槽中是否含有 ElHeader || ElFooter 子组件
        // 有就返回true 否则 false
        return vNodes.some(vNode => {
          const tag = (vNode.type as Component).name
          return tag === 'ElHeader' || tag === 'ElFooter'
        })
      } else {
        // 没有插槽 默认false
        return false
      }
    })
    return {
      isVertical,
    }
  },
})
</script>
  • 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
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

header

<template>
  <header class="el-header" :style="{ height }">
    <slot></slot>
  </header>
</template>
  • 1
  • 2
  • 3
  • 4
  • 5
<script lang="ts">
import { defineComponent } from 'vue'

export default defineComponent({
  name: 'ElHeader',
  props: {
    // 默认高度 60px
    height: {
      type: String,
      default: '60px',
    },
  },
})
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

footer

<template>
  <footer class="el-footer" :style="{ height }">
    <slot></slot>
  </footer>
</template>
  • 1
  • 2
  • 3
  • 4
  • 5
<script lang="ts">
import { defineComponent } from 'vue'

export default defineComponent({
  name: 'ElFooter',
  props: {
    // 默认高度 60px
    height: {
      type: String,
      default: '60px',
    },
  },
})
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

aside

<template>
  <aside class="el-aside" :style="{ width }">
    <slot></slot>
  </aside>
</template>
  • 1
  • 2
  • 3
  • 4
  • 5
<script lang="ts">
import { defineComponent } from 'vue'

export default defineComponent({
  name: 'ElAside',
  props: {
    // 默认宽度 300px
    width: {
      type: String,
      default: '300px',
    },
  },
})
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

main

<template>
  <main class="el-main">
    <slot></slot>
  </main>
</template>
  • 1
  • 2
  • 3
  • 4
  • 5
<script lang="ts">
import { defineComponent } from 'vue'

export default defineComponent({
  name: 'ElMain',
})
</script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/542673
推荐阅读
相关标签
  

闽ICP备14008679号