当前位置: 首页 > news >正文

Vue核心技术之组件封装和路由

Python 列表推导式实战示例

列表推导式是Python中一种简洁高效的创建列表的方式,可以替代传统的for循环,使代码更加简洁易读。

1. 基本用法

# 传统for循环方式 squares = [] for i in range(10): squares.append(i * i) 列表推导式方式(更简洁) squares = [i * i for i in range(10)] print(squares) # 输出: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

2. 带条件的列表推导式

# 只生成偶数的平方 even_squares = [i * i for i in range(10) if i % 2 == 0] print(even_squares) # 输出: [0, 4, 16, 36, 64] 多个条件 filtered_numbers = [x for x in range(20) if x > 5 and x % 3 == 0] print(filtered_numbers) # 输出: [6, 9, 12, 15, 18] 条件表达式(类似三元运算符) numbers = [1, 2, 3, 4, 5] result = ['偶数' if x % 2 == 0 else '奇数' for x in numbers] print(result) # 输出: ['奇数', '偶数', '奇数', '偶数', '奇数']

3. 与普通循环对比示例

# 场景:从字符串列表中提取长度大于3的字符串并转为大写 words = ['apple', 'cat', 'banana', 'dog', 'elephant', 'fox'] 传统for循环方式 result1 = [] for word in words: if len(word) > 3: result1.append(word.upper()) 列表推导式方式 result2 = [word.upper() for word in words if len(word) > 3] print("传统循环结果:", result1) # 输出: ['APPLE', 'BANANA', 'ELEPHANT'] print("列表推导式结果:", result2) # 输出: ['APPLE', 'BANANA', 'ELEPHANT'] 性能对比(列表推导式通常更快) import time 测试传统循环 start1 = time.time() for _ in range(100000): result = [] for word in words: if len(word) > 3: result.append(word.upper()) end1 = time.time() 测试列表推导式 start2 = time.time() for _ in range(100000): result = [word.upper() for word in words if len(word) > 3] end2 = time.time() print(f"传统循环耗时: {end1 - start1:.4f}秒") print(f"列表推导式耗时: {end2 - start2:.4f}秒") print(f"列表推导式比传统循环快: {(end1 - start1) - (end2 - start2):.4f}秒")

4. 嵌套列表推导式

# 创建二维矩阵 matrix = [[i * j for j in range(1, 4)] for i in range(1, 4)] print(matrix) # 输出: [[1, 2, 3], [2, 4, 6], [3, 6, 9]] 展平二维列表 matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flattened = [num for row in matrix for num in row] print(flattened) # 输出: [1, 2, 3, 4, 5, 6, 7, 8, 9]

总结:列表推导式让代码更简洁、更Pythonic,但在复杂逻辑时仍需考虑可读性。对于简单的转换和过滤操作,列表推导式是首选。

1.my-tag标签组件封装

作用:双击显示输入框,失去焦点后隐藏输入框,修改内容并回车保存

<template> <div class="my-tap"> <input v-if="isEdit" class="input" type="text" placeholder="输入标签" /> <div v-else class="text" @dblclick="handleClick">新兰</div> </div> </template> <script> export default { data() { return { isEdit: false, } }, methods: { handleClick() { //双击后切换到显示状态 this.isEdit = true //等dom更新完获取焦点 this.$nextTick(() => { this.$refs.inp.focus() }) } } } </script>

2.my-table 表格组件封装

1.数据不能写死,动态传递表格渲染的数据

2.结构不能写死:多处结构自定义

(1)表头支持自定义

(2)主体支持自定义

<script> import MyTable from './App.vue' export default { components: { MyTable }, data() { return { tempText: 'cr', tempText1: '温简言', goods: [ { id: 101, picture: 'https://c-ssl.dtstatic.com/uploads/blog/202407/30/jJS5ZpX0Se9G2v6.thumb.1000_0.jpeg' }, { id: 101, picture: 'https://c-ssl.dtstatic.com/uploads/blog/202407/30/jJS5ZpX0Se9G2v6.thumb.1000_0.jpeg' }, {id:101, picture:'https://c-ssl.dtstatic.com/uploads/blog/202407/30/jJS5ZpX0Se9G2v6.thumb.1000_0.jpeg'} ] } }, } </script>

3.单页面应用

单页面开发效率高性能好的原因是:页面按需更新

要按需更新首先要明确:访问路径和组件的对应关系 ---->路由

4.插件VueRouter

2个核心步骤

(1)创建需要的组件,配置路由规则

(2)配置导航,配置路由出口

<div class="footer_wrap"> <a href="#/find">发现</a> <a href="#/my">我的</a> <a href="#/friend">朋友</a> </div> <div class="top"> <router-view></router-view> </div>

组件分类

1.页面组件和复用组件(都是.vue类型文档)

2.页面组件-views文件夹=>配合路由,页面展示

复用组件-components.文件夹 => 封装复用

5.路由的封装抽离

import App from "./App.vue" import MyTable from "./MyTable.vue" Vue.use(vueRouter) //插件初始化 const router = new vueRouter({ //route 一条路由器规则 { path:路径, component:组件 } routes: [ { path: './App.vue', component: App }, { path:'/MyTable',component:MyTable }, ] })

6.声明式导航

1.vue-router提供一个全局组件router-link(取代a标签)

(1)能跳转,配置to 属性指定路径。

(2)能高亮,默认就会提供高亮类名,可直接设置高亮样式

<template> <div class="table-case"> <MyTable :data="goods"></MyTable> <div class="footer_wrap"> <router-link to="/find">发现</router-link> <router-link to="/my">我的</router-link> <router-link to="/part">朋友</router-link> </div> <div class="top"> <router-view></router-view> </div> </div> </template>

2.两个类名

① router-link-active模糊匹配(用的多)

to="/my"可以匹配/my/my/a/my/6

② router-link-exact-active精确匹配

to="/my"仅可以匹配/my

3.跳转传参

①查询参数传参: to="/path?参数名=值”

¥route.query.参数名

②动态路由传参:

//创建一个路由对象 const router = new VueRouter({ router: [ { path: '/searth/:words', component: Search } ] })

7.Vue路由重定向

匹配path后,强制跳转path路径

import NotFind from '@/views/NotFind' const router new VueRouter({ routes:[ { path:'/'redirect:'/home'}, { path:'/home',component:Home }path:'/search/words?',component:Search}, { path:'*',component:NotFind } ] })

http://www.jsqmd.com/news/1273253/

相关文章:

  • 杭州上门黄金回收靠谱商家有哪些?2026全城走访盘点,避开偷克重隐形套路 - 资讯洞察员
  • 【CTF-MISC-流量分析】从ICMP中提取data,用CyberChef从hex转为ascii
  • 品牌 AI 推荐位为什么消失?RAG 召回逻辑解析
  • C# Socket TCP客户端编程实战:异步通信、粘包处理与工业级实现
  • 2026保山厨房渗水到楼下怎么办?自来水管暗管检测方法,仪器测漏收费标准 - 宅安选房屋修缮
  • [Android 从零到一] Fragment 事务与状态丢失:从崩溃现场到稳定治理
  • Claude Code高效开发:20个核心命令实战指南
  • 深入解析SM320F28335-HT:高温工业级DSC的架构、外设与电机控制实战
  • IPTV频道管理革命:如何用开源工具告别“无效播放源“的烦恼?
  • OMAP5912异构SoC内存映射与DMA控制器深度解析
  • 零甲醛不锈钢定制家居品牌选购攻略,口碑实力双优推荐 - myqiye
  • 编写程序盘点人生所有关键转折点,总结心态变化规律,预判未来危机时的调整方式。
  • centos安装配置jenkins【配置pipeline】
  • 本地AI学习助手OpenClaw:隐私保护与高效学习实践
  • 北京靠谱离婚律师推荐:如何挑选专办财产分割与抚养权纠纷的知名婚姻律所及注意事项 - 商讯
  • Linux服务器入侵应急响应实战:从Webshell告警到攻击链路溯源
  • 2026年7月苏州GEO搜索服务行业研究报告:内容持续更新情况分析 - 速递信息
  • DM3730/DM3725引脚复用与电气特性设计全解析
  • 探索高效AI助手:全面掌握Goose桌面应用可视化操作指南
  • Claude Code架构解析与工程实践指南
  • 无机陶瓷膜设备如何解决工业分离难题,2026技术升级解析 - 品牌优选官
  • TMS320LF240xA DSP电机控制:核心架构、外设配置与实战指南
  • 基于AsyncHttpClient实现CSP与混合内容安全策略的工程实践
  • 除甲醛遭遇信息贩子?深度揭秘行业灰色产业链,4 个硬核方法避开转包陷阱 - 速递信息
  • AI代理间端到端加密文件传递:YAFL库原理与实践指南
  • 深度学习实战指南:从理论到神经符号推理的完整路径
  • 神农架青少年武术培训机构排名,武当山精武武校值得去吗 - 圣龙武术朱老师
  • geo机构哪家靠谱榜单TOP5(2026年7月):六大维度横评帮你选对不踩坑 - 资讯在线
  • 太原口碑好的装修公司 - GrowthUME
  • DM6435外设接口时序与寄存器配置实战指南