首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第 7 章 处理用户交互
7.1 事件的监听与处理
7.1.1 事件监听示例
7.1.2 多事件处理
7.1.3 事件修饰符
7.2 Vue中的事件类型
7.2.1 常用的事件类型
7.2.2 按键修饰符
7.3 实战一:随鼠标移动的小球
7.4 实战二:弹球游戏
第 8 章 组件基础
8.1 关于Vue应用与组件
8.1.1 Vue应用的数据配置选项
8.1.2 定义组件
8.2 组件中数据与事件的传递
8.2.1 为组件添加外部属性
8.2.2 处理组件事件
8.2.3 在组件上使用v-model指令
8.3 自定义组件的插槽
8.3.1 组件插槽的基本用法
8.3.2 多具名插槽的用法
8.4 动态组件的简单应用
8.5 实战:开发一款小巧的开关按钮组件
第 9 章 组件进阶
9.1 组件的生命周期与高级配置
9.1.1 生命周期方法
9.1.2 应用的全局配置选项
9.1.3 组件的注册方式
9.2 组件props属性的高级用法
9.2.1 对props属性进行验证
9.2.2 props的只读性质
9.2.3 组件数据注入
9.3 组件Mixin技术
9.3.1 使用Mixin来定义组件
9.3.2 Mixin选项的合并
9.3.3 进行全局Mixin
9.4 使用自定义指令
9.4.1 认识自定义指令
9.4.2 自定义指令的参数
9.5 组件的Teleport功能
第 10 章 Vue响应性编程
10.1 响应性编程原理与在Vue中的应用
10.1.1 手动追踪变量的变化
10.1.2 Vue中的响应性对象
10.1.3 独立的响应性值Ref的应用
10.2 响应式的计算与监听
10.2.1 关于计算变量
10.2.2 监听响应式变量
10.3 组合式API的应用
10.3.1 关于setup方法
10.3.2 在setup方法中定义生命周期行为
10.4 实战:支持搜索和筛选的用户列表示例
10.4.1 常规风格的示例工程开发
10.4.2 使用组合式API重构用户列表页面
当前位置:
首页>>
技术小册>>
TypeScript和Vue从入门到精通(三)
小册名称:TypeScript和Vue从入门到精通(三)
### 8.5 实战:开发一款小巧的开关按钮组件 在Web开发中,UI组件的定制与复用是提高开发效率、保持应用风格一致性的重要手段。本章节将带领你实战开发一款小巧而功能完备的开关按钮(Toggle Button)组件,使用TypeScript增强类型安全,并结合Vue.js的响应式系统和组件化特性,实现一个既美观又实用的UI组件。 #### 8.5.1 项目准备 在开始编写组件之前,请确保你的开发环境已经安装了Node.js、Vue CLI以及TypeScript支持。我们将使用Vue 3和TypeScript来构建这个组件。 1. **创建Vue项目**(如果尚未创建): ```bash vue create my-vue-app ``` 在创建过程中,选择“Manually select features”,确保勾选了“TypeScript”、“Router”、“Vuex”(如果需要的话),以及“Linter / Formatter”(推荐选择ESLint with Prettier)。 2. **进入项目目录**: ```bash cd my-vue-app ``` 3. **安装Vue 3 TypeScript支持(如果Vue CLI未自动配置)**: ```bash vue add typescript ``` 4. **创建组件目录**: 在`src/components`目录下创建一个新文件夹`ToggleButton`,并在该文件夹中创建`ToggleButton.vue`和`ToggleButton.types.ts`(用于定义组件的TypeScript类型)。 #### 8.5.2 组件设计 开关按钮组件通常包含以下几个基本功能: - 切换状态(开/关)。 - 自定义开关时的颜色、大小等样式。 - 支持v-model双向绑定,方便在父组件中控制状态。 #### 8.5.3 编写ToggleButton.vue ```vue <template> <div class="toggle-button" @click="toggle" :class="{ 'is-on': isOn }"> <div class="toggle-switch"></div> </div> </template> <script lang="ts"> import { defineComponent, PropType, ref, watch } from 'vue'; export default defineComponent({ name: 'ToggleButton', props: { modelValue: { type: Boolean as PropType<boolean>, default: false, }, onColor: { type: String, default: '#4CAF50', // 绿色 }, offColor: { type: String, default: '#F44336', // 红色 }, size: { type: [String, Number], default: '40px', }, }, emits: ['update:modelValue'], setup(props, { emit }) { const isOn = ref(props.modelValue); watch(() => props.modelValue, (newVal) => { isOn.value = newVal; }); const toggle = () => { isOn.value = !isOn.value; emit('update:modelValue', isOn.value); }; return { isOn, toggle }; }, }); </script> <style scoped> .toggle-button { position: relative; width: var(--size, 40px); height: var(--size, 40px); background-color: #ccc; border-radius: 50%; cursor: pointer; transition: background-color 0.3s; --size: var(--toggle-size, 40px); } .toggle-button.is-on { background-color: var(--on-color, #4CAF50); } .toggle-button.is-off { background-color: var(--off-color, #F44336); } .toggle-switch { position: absolute; top: 2px; left: 2px; width: calc(100% - 4px); height: calc(100% - 4px); background-color: #fff; border-radius: 50%; transition: transform 0.3s; transform: translateX(calc(var(--on-position, 0) * 100%)); } .toggle-button.is-on .toggle-switch { transform: translateX(calc(100% - 100% * var(--switch-offset, 0.3))); } </style> <!-- 注意:CSS中使用了CSS变量和calc()函数来增强灵活性和可定制性,但直接在此示例中未完全实现,需根据实际需求调整 --> ``` #### 8.5.4 组件样式调整 在上述代码中,我们使用了基本的CSS样式来定义开关按钮的外观。你可以根据项目的UI设计规范进一步调整颜色、大小、边框等样式。特别是`.toggle-switch`的`transform`属性,它决定了开关滑块的位置,当按钮处于“开”状态时,滑块应向右移动。 #### 8.5.5 组件使用 在Vue应用的任何组件中,你现在可以像使用其他Vue组件一样使用`ToggleButton`组件了。例如,在`App.vue`中: ```vue <template> <div id="app"> <ToggleButton v-model="isLightOn" onColor="#FFD700" offColor="#343a40" size="50px" /> <p>Light is {{ isLightOn ? 'ON' : 'OFF' }}</p> </div> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; import ToggleButton from './components/ToggleButton/ToggleButton.vue'; export default defineComponent({ name: 'App', components: { ToggleButton, }, setup() { const isLightOn = ref(false); return { isLightOn }; }, }); </script> ``` #### 8.5.6 组件测试与优化 - **测试**:确保在不同浏览器和设备上测试你的开关按钮组件,检查其响应性、样式一致性以及功能完整性。 - **优化**:考虑添加更多的可配置选项,如动画效果、禁用状态等,以提升用户体验。 - **文档**:编写组件的使用文档,包括属性、事件、插槽等,方便团队成员或未来自己复用。 #### 8.5.7 总结 通过本章节的实战,我们成功开发了一款小巧而功能完备的开关按钮组件,使用了Vue 3和TypeScript的强大功能。这个组件不仅具有基本的开关功能,还支持自定义样式和v-model双向绑定,易于集成到任何Vue应用中。希望这个实战案例能帮助你更好地理解Vue组件的开发流程,并在未来的项目中灵活运用。
上一篇:
8.4 动态组件的简单应用
下一篇:
第 9 章 组件进阶
该分类下的相关小册推荐:
Vue面试指南
Vue.js从入门到精通(四)
Vue.js从入门到精通(一)
TypeScript和Vue从入门到精通(一)
VUE组件基础与实战
Vue.js从入门到精通(二)
Vue源码完全解析
vuejs组件实例与底层原理精讲
TypeScript和Vue从入门到精通(二)
TypeScript和Vue从入门到精通(四)
Vue3技术解密
vue项目构建基础入门与实战