为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
活动

课程名称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>

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消