继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【金秋打卡】第14天 Vue3 + Typescript 从0到1开发通用基础组件(4-9~4-10)

慕仔9208797
关注TA
已关注
手记 60
粉丝 1
获赞 7

课程名称:Vue3 + Typescript 从0到1开发通用基础组件

课程讲师:张轩

课程内容:

今天课程学习的主要知识点内容包括:
1、使用 vue3 开发 Dropdown 组件;
2、使用 vue3 开发 DropdownItem 组件;
3、对 Dropdown + DropdownItem 组件的使用;

课程收获:

通过学习老师的视频课程和同学的公开笔记,主要收获如下:
一、使用 vue3 开发 Dropdown 组件
1、编写 Dropdown.vue 文件:

<template>
<div class="dropdown" ref="dropdownRef">
  <a href="#" class="btn btn-outline-light my-2 dropdown-toggle" @click.prevent="toggleOpen">
    {{title}}
  </a>
  <ul class="dropdown-menu" :style="{display: 'block'}" v-if="isOpen">
    <slot></slot>
  </ul>
</div>
</template>

<script lang="ts">
import { defineComponent, ref, watch } from 'vue'
import useClickOutside from '../hooks/useClickOutside'
export default defineComponent({
  name: 'Dropdown',
  props: {
    title: {
      type: String,
      required: true
    }
  },
  setup() {
    const isOpen = ref(false)
    const dropdownRef = ref<null | HTMLElement>(null)
    const toggleOpen = () => {
      isOpen.value = !isOpen.value
    }
    const isClickOutside = useClickOutside(dropdownRef)

    watch(isClickOutside, () => {
      if (isOpen.value && isClickOutside.value) {
        isOpen.value = false
      }
    })
    return {
      isOpen,
      toggleOpen,
      dropdownRef
    }
  }
})
</script>

二、使用 vue3 开发 DropdownItem 组件
1、编写 DropdownItem.vue 文件:

<template>
  <li
    class="dropdown-option"
    :class="{'is-disabled': disabled}"
  >
    <slot></slot>
  </li>
</template>

<script lang="ts">
import { defineComponent } from 'vue'
export default defineComponent({
  props: {
    disabled: {
      type: Boolean,
      default: false
    }
  }
})
</script>

<style>
.dropdown-option.is-disabled * {
  color: #6c757d;
  pointer-events: none;
  background-color: transparent;
}
</style>

三、对 Dropdown + DropdownItem 组件的使用
1、修改 GlobalHeader.vue ,主要修改内容如下:
(1)导入 Dropdown + DropdownItem 组件:

<script lang="ts">
......
import Dropdown from './Dropdown.vue'
import DropdownItem from './DropdownItem.vue'
......
export default defineComponent({
  ......
  components: {
    Dropdown,
    DropdownItem
  },
  ......
})
</script>

(2)使用 Dropdown + DropdownItem 组件:
将原来的:

      <li class="list-inline-item"><a href="#" class="btn btn-outline-light my-2">"`你好 ${user.name}`"</a></li>

替换成:

      <li class="list-inline-item">
        <dropdown :title="`你好 ${user.name}`">
          <dropdown-item><a href="#" class="dropdown-item">新建文章</a></dropdown-item>
          <dropdown-item disabled><a href="#" class="dropdown-item">编辑资料</a></dropdown-item>
          <dropdown-item><a href="#" class="dropdown-item">退出登陆</a></dropdown-item>
        </dropdown>
      </li>

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP