题解:qoj15502 字符串问题
2025/12/19 21:59:14
| 特点 | 说明 |
|---|---|
| 模块化 | 将JS、CSS等拆分为可复用模块,单独维护 |
| 组件化 | 封装UI组件、CSS样式、JS行为,提升复用性和管理效率 |
| 规范化 | 统一目录结构、编码规范、开发流程,降低协作成本 |
| 自动化 | 项目构建、开发、测试、打包、部署全流程自动化 |
node -v(显示版本号)、npm -v(显示npm版本)npmconfigsetprefix"你的NodeJS安装目录"npmconfigsetregistry https://registry.npmmirror.comnpm install xxx从远程仓库下载依赖到本地npmcreate vue@3.3.4| 选项 | 说明(默认值:No) |
|---|---|
| Project name | 项目名称(默认vue-project) |
| Add TypeScript? | 是否添加TypeScript支持 |
| Add JSX Support? | 是否添加JSX支持 |
| Add Vue Router? | 是否添加路由管理(单页应用必备) |
| Add Pinia? | 是否添加状态管理组件 |
| Add Vitest? | 是否添加单元测试工具 |
| Add Cypress? | 是否添加端到端测试工具 |
| Add ESLint? | 是否添加代码质量检查工具 |
cd 项目名称npm install(联网下载依赖,失败可重试)npm run devsrc(核心开发目录,编写组件、JS、样式)main.js:入口文件(创建Vue实例、挂载根组件)App.vue:根组件(页面入口)*.vue:单文件组件(SFC,封装模板、逻辑、样式)<script setup> // 引入响应式API和钩子 import { ref, onMounted } from 'vue' // 响应式变量(通过.value访问) const count = ref(0) // 函数定义 const increment = () => count.value++ // 生命周期钩子 onMounted(() => console.log('组件挂载完成')) </script>ref():创建基本类型响应式变量onMounted():组件挂载完成后执行<script> export default { // 数据定义 data() { return { count: 0 } }, // 方法定义 methods: { increment() { this.count++ } }, // 生命周期钩子 mounted() { console.log('组件挂载完成') } } </script>| 组合式API | 选项式API |
|---|---|
| 无this | this指向组件实例 |
| 函数化组织逻辑 | 选项化组织逻辑 |
| 灵活组合复用 | 结构固定,复用性较弱 |
页面加载后异步请求数据,渲染表格,支持条件查询
npm install axiosviews/UserList.vue,封装模板、逻辑、样式ref()定义响应式变量(用户列表、查询条件)onMounted()钩子触发初始查询App.vue中引入并使用UserList组件<script setup> import { ref, onMounted } from 'vue' import axios from 'axios' const userList = ref([]) const name = ref('') // 查询条件:姓名 const gender = ref('') // 查询条件:性别 const job = ref('') // 查询条件:职位 // 查询函数 const search = () => { axios.get(`https://web-server.itheima.net/emps/list?name=${name.value}&gender=${gender.value}&job=${job.value}`) .then(res => userList.value = res.data.data) } // 页面加载时执行查询 onMounted(() => search()) </script>npminstallelement-plus@2.4.4 --savemain.js中全局引入:import{createApp}from'vue'importAppfrom'./App.vue'// 引入ElementPlus和样式importElementPlusfrom'element-plus'import'element-plus/dist/index.css'// 引入中文语言包(可选)importzhCnfrom'element-plus/dist/locale/zh-cn.mjs'constapp=createApp(App)app.use(ElementPlus,{locale:zhCn})// 全局注册app.mount('#app')template、script、style代码App.vue中引入type(primary/success/info/warning/danger)<template> <el-button>默认按钮</el-button> <el-button type="primary">主要按钮</el-button> <el-button type="success">成功按钮</el-button> </template>:data:绑定表格数据源(数组)prop:列数据对应数据源的键名label:列标题width:列宽度<script setup> const tableData = [ { date: '2016-05-03', name: 'Tom', address: 'Los Angeles' } ] </script> <template> <el-table :data="tableData" border style="width: 100%"> <el-table-column prop="date" label="日期" width="180" /> <el-table-column prop="name" label="姓名" width="180" /> <el-table-column prop="address" label="地址" /> </el-table> </template>v-model:current-page:当前页码v-model:page-size:每页条数:page-sizes:每页条数选择器(数组)layout:分页布局(total-总条数、sizes-条数选择、prev-上一页、pager-页码、next-下一页、jumper-跳转):total:总数据量@size-change:每页条数改变时触发@current-change:当前页码改变时触发<script setup> import { ref } from 'vue' const currentPage4 = ref(4) const pageSize4 = ref(100) const handleSizeChange = (val) => console.log(`每页${val}条`) const handleCurrentChange = (val) => console.log(`当前第${val}页`) </script> <template> <el-pagination v-model:current-page="currentPage4" v-model:page-size="pageSize4" :page-sizes="[100, 200, 300, 400]" layout="total, sizes, prev, pager, next, jumper" :total="400" @size-change="handleSizeChange" @current-change="handleCurrentChange" /> </template>v-model(布尔值,控制显示/隐藏)<script setup> import { ref } from 'vue' const dialogTableVisible = ref(false) // 初始隐藏 </script> <template> <el-button @click="dialogTableVisible = true">打开对话框</el-button> <el-dialog v-model="dialogTableVisible" title="标题"> <!-- 对话框内容(如表格) --> <el-table :data="tableData">...</el-table> </el-dialog> </template>:model:绑定表单数据对象:inline:行内布局(true/false)<script setup> import { ref } from 'vue' const formInline = ref({ user: '', region: '', date: '' }) const onSubmit = () => console.log('提交表单', formInline.value) </script> <template> <el-form :inline="true" :model="formInline"> <el-form-item label="审批人"> <el-input v-model="formInline.user" placeholder="请输入" /> </el-form-item> <el-form-item> <el-button type="primary" @click="onSubmit">查询</el-button> </el-form-item> </el-form> </template>使用ElementPlus组件实现员工列表查询、数据展示,包含表单查询、表格渲染、条件筛选
npm install axiosviews/EmpList.vueApp.vue中引入EmpList组件script setup、ref、生命周期钩子)data/prop→ 绑定业务逻辑