d40: vue杂项问题 - 详解

news/2025/10/26 9:14:42/文章来源:https://www.cnblogs.com/ljbguanli/p/19166468

d40: vue杂项问题 - 详解

导航

    1. Vue 中使用 HTML 原生属性的问题
    1. el-dialog 与父组件交互的异步问题
    1. 动态路由机制中关于根路由的小问题
    1. refdep 特性

1. Vue 中使用 HTML 原生属性的问题

在 Vue 项目中,我们可能会不小心使用 HTML 原生事件属性,例如:

<div onclick="profileVisible = true">点击我</div>

这看起来没什么问题,但实际上,这种方式存在很大的隐患。当 onclick 被触发时,浏览器会在 全局作用域(即 window 对象)下执行这句 JS 代码。它会寻找一个名为 window.profileVisible 的变量并将其设置为 true,而完全不知道 Vue 组件实例的存在,更不知道你定义在组件 data 中的那个 profileVisible

Vue 指令与原生 HTML 属性的对比

特性@click (Vue 指令)onclick (原生 HTML 属性)
执行上下文Vue 组件实例 (this)全局作用域 (window)
响应式能触发 Vue 的响应式更新不能触发 Vue 的响应式更新
数据访问可以访问 data, props, computed只能访问全局变量
方法调用可以调用 methods 中定义的方法只能调用全局函数
推荐用法在 Vue 项目中必须使用在 Vue 项目中应避免使用

结论

在 Vue 项目中,始终 应该使用 Vue 的事件处理指令(如 @click, @input, @submit 等)来处理 DOM 事件,而不是原生的 HTML 事件属性。

2. el-dialog 与父组件交互的异步问题

在使用 el-dialog 组件时,我们可能会遇到子组件与父组件交互的异步问题。例如,我们有以下代码:

当我们试图向子组件传输 allPermissions 等数据,并在 handleOpen 方法中将 allPermissions 处理为树时,发现子组件生成的树还是上一次的数据。这是因为 el-dialogopen 事件在 DOM 更新前触发,而父组件异步拉取新权限后才将 props.permissions 改掉。因此,当 handleOpen 同步执行时,新数据还没下来,我们处理的其实是上一次的数据。

解决方案

此时,应该使用 watch 监听 allPermissions 的变化,并进行同步:

watch(
() => props.allPermissions,
() => {
tableData.value = handleTree(props.allPermissions);
},
{ immediate: true }   // 立即执行一次
);

3. 动态路由机制中关于根路由的小问题

在动态路由机制中,我们可能会遇到一些关于根路由的小问题。例如,原来的动态路由机制会将无 component 的组件(即目录)用 LayoutView 来兜底。这样做的问题是,如果出现目录嵌套目录的情况,就会对 Layout 进行重复渲染。

解决方案

这个问题其实很好解决,只需要将目录的 component 置为 null,并整体上添加 LayoutView 作为根路由即可:

/**
* 获取路由列表
*/
export const buildRoutes = async (menus) => {
const children = buildNestedRoutes(menus);
const route = {
path: '/',
redirect: '/index',
component: LayoutView,
children: children,
meta: {}
};
return route;
};

在这个过程中,我们意识到了重复定义相同的根路由可能会带来一些问题。Vue Router 的路由匹配机制是通过路径 + 其他属性(如 namecomponent)来判断路由是否“重复”的。为了避免奇奇怪怪的隐式覆盖问题,最好统一一个根路由:

/**
* 加入到 Layout 中的静态路由
*/
export const staticChildren = [
{
path: 'index',
component: () => import('@/views/home/index.vue'),
name: 'Index',
meta: {
title: '首页',
hidden: false,
}
}
];
/**
* 获取路由列表
*/
export const buildRoutes = async (menus) => {
const dynamicChildren = buildNestedRoutes(menus);
// 合并静态路由和动态路由
const allChildren = mergeChildren(staticChildren, dynamicChildren);
// 创建根路由
const rootRoute = {
path: '/',
component: LayoutView,
name: 'Layout',
redirect: '/index',
children: allChildren,
meta: {}
};
// 防止重复添加
if (router.hasRoute('Layout')) router.removeRoute('Layout');
return rootRoute;
};

我们可以通过 map 来简单地去重,这里就不展示了。

4. refdep 特性

在使用 ref 时,我们可能会遇到一些关于 dep 特性的问题。例如,我们有以下代码:

export const AllPages = {
pageNum: 1,
pageSize: 1000000
};

现在有两段类似的代码:

queryParams.value = { pageNum: 1, pageSize: 10};
queryParams.value = AllPages;

我们将其用于对 createdAt 字段进行重置:


第一段代码顺利完成了,但是第二段代码还残留着之前的 createdAt 数据,这是为什么呢?

原因分析

queryParams 中,我们一开始没有 createdAt 这个字段。而在第一次添加 createdAt 后,dep 列表里会添加这个字段的槽位。我们对其重新赋值 { pageNum: 1, pageSize: 10} 后,Vue 的 proxy 会保留引用关系。因为 createdAt 实际上不存在,所以悄悄地对其赋值为 undefinedqueryParams.value = AllPages; 这一步相当于把 ref 重新赋值了一个普通对象,这个对象里面又没有关于 createdAt 的信息,v-model 绑定的路径直接断了(变成访问一个非响应式的、根本不存在的属性),DatePicker 内部监听不到“从有到无”的变动,于是面板里依旧显示旧值。

解决方案

AllPages 对象展开 { ...AllPages },这样就和 { pageNum: 1, pageSize: 10} 等价了。


以上就是我们在使用 Vue.js 过程中遇到的一些常见问题及其解决方案。希望这些内容能对大家有所帮助。


注意事项

  1. 在 Vue 项目中,始终 使用 Vue 的事件处理指令(如 @click, @input, @submit 等)来处理 DOM 事件,而不是原生的 HTML 事件属性。
  2. 使用 watch 监听 props 的变化,以解决子组件与父组件交互的异步问题。
  3. 在动态路由机制中,避免重复定义相同的根路由,统一一个根路由可以避免很多问题。
  4. 注意 refdep 特性,在重新赋值时要确保对象的结构一致,避免出现绑定路径断开的问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/946600.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day04-Coze工作流案例(中草药识别-菜谱生成-智能换脸)

今日内容coze的工作流---》coze智能体中:工作流支持通过可视化的方式,对插件、大语言模型、代码块等功能进行组合,从而实现复杂、稳定的业务流程编排 干一件时间的流程:第一步干什么,第二步干什么,最后干什么。。…

记力扣2271.毯子覆盖的最多白色砖块数 练习理解 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:【Android之路】 Kotlin 的 data class、enum class、sealed interface

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

精通-Pandas-探索性分析-全-

精通 Pandas 探索性分析(全)原文:Mastering Exploratory Analysis with Pandas 协议:CC BY-NC-SA 4.0零、前言 在本书中,您将深入学习 Pandas,这是一个 Python 库,用于处理,转换和分析数据。 这是用于探索性数…

【图像处理-基础知识】SFIT特征解析 - 教程

【图像处理-基础知识】SFIT特征解析 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

深入解析:【FPGA+DSP系列】——(2)DSP最小核心板进行ADC采样实验(采集电位器输出电压)

深入解析:【FPGA+DSP系列】——(2)DSP最小核心板进行ADC采样实验(采集电位器输出电压)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !import…

精通-HTML5-表单-全-

精通 HTML5 表单(全)原文:zh.annas-archive.org/md5/835835C6B2E78084A088423A2DB0B9BD 译者:飞龙 协议:CC BY-NC-SA 4.0前言 Web 浏览者可能永远不会了解应用程序的背景,比如 HTML5、CSS3、响应式网页设计或 PH…

ABC429F Shortest Path Query 题解

AtCoder 写在前面 赛时没想出来,赛后经过大神和题解点拨有点思路了。之前确实没咋遇见过多少线段树维护矩阵的题。那就写写题解当积累trick了吧。 题意 给出一张\(3 \times N\) 的矩阵,内含# . 两种字符。其中# 代表…

苏维埃日报08.高三生福音?大屏课表软件ClassIsland助你度过高三

\(1.\)什么是\(ClassIsland\)? \(ClassIsland\)是一款适用于班级多媒体屏幕的课表的信息显示工具,可以一目了然地显示各种信息。本应用的名字灵感源于\(iOS\)灵动岛(\(Dynamic\) \(Island\))功能。 \(2.\)如何下载…

创建平面设计网站-全-

创建平面设计网站(全)原文:zh.annas-archive.org/md5/76ED001744425FC67A6333D19F2CBD18 译者:飞龙 协议:CC BY-NC-SA 4.0前言 扁平设计是一种数字设计风格,近年来在网页和用户界面设计中成为最大的趋势之一。它…

2025年优质的造纸橡胶辊,天然橡胶辊品牌厂家排行榜

2025年优质的造纸橡胶辊、天然橡胶辊品牌厂家排行榜 在造纸、印刷、纺织、木业、光伏等行业中,橡胶辊的质量直接影响生产效率和产品品质。优质的橡胶辊需具备耐磨、耐高温、耐腐蚀等特性,同时要求精准的尺寸控制和稳…

软件神器 --- x64db插件 之 SharpOD

软件神器 --- x64db插件 之 SharpODhttps://www.unknowncheats.me/forum/d...=file&id=21224 下载解压后将SharpOD dp32位放置32位的x86dbg的32位目录plugin目录下,64位同理 重启软件打开插件

2025年耐用的移动搅拌车,搅拌车优质厂家推荐榜单

2025年耐用的移动搅拌车:搅拌车优质厂家推荐榜单 在建筑工程、道路施工和矿山作业等领域,移动搅拌车是不可或缺的重要设备。随着技术的进步,市场对搅拌车的耐用性、效率和智能化要求越来越高。2025年,选择一台高质…

2025年靠谱的方形冷却塔,横流式冷却塔用户口碑最好的厂家榜

2025年靠谱的方形冷却塔,横流式冷却塔用户口碑最好的厂家榜在工业生产和商业建筑领域,冷却塔作为关键的散热设备,其性能和质量直接影响整个系统的运行效率和能耗水平。随着2025年能效标准的进一步提高,方形冷却塔和…

2025年口碑好的硅胶制品,密封硅胶制品厂家最新实力排行

2025年口碑好的硅胶制品,密封硅胶制品厂家最新实力排行在当今工业制造领域,硅胶制品因其优异的耐温性、绝缘性、耐腐蚀性和弹性等特点,已成为汽车、医疗、电子、家电等行业不可或缺的关键零部件。随着2025年的到来,…

2025年耐用的北美款三防灯,单双管三防灯厂家推荐及选择指南

2025年耐用的北美款三防灯:单双管三防灯厂家推荐及选择指南 在工业照明、户外照明及特殊环境(如潮湿、多尘、腐蚀性场所)中,三防灯(防水、防尘、防腐)的需求持续增长。2025年,北美市场对高防护等级(IP65/IP66…

2025年优质的高速电吹风开关,电吹风开关厂家最新用户好评榜

2025年优质高速电吹风开关厂家最新用户好评榜:权威推荐与选购指南 随着家电行业智能化与高性能需求的提升,高速电吹风开关作为核心部件,其可靠性、安全性和耐久性直接影响用户体验。为帮助厂商与采购商快速锁定优质…

2025年比较好的冷拔无缝钢管,大口径无缝钢管热门厂家推荐榜单

2025年比较好的冷拔无缝钢管,大口径无缝钢管热门厂家推荐榜单在工业制造、石油化工、电力能源等众多领域,无缝钢管作为重要的工业材料,其质量与性能直接关系到工程项目的安全与效率。随着2025年的到来,市场对高品质…

2025年靠谱的广场音乐喷泉,水秀音乐喷泉行业内口碑厂家排行榜

2025年靠谱的广场音乐喷泉、水秀音乐喷泉行业内口碑厂家排行榜在当今城市景观建设和文旅项目开发中,音乐喷泉和水秀表演已成为提升城市形象、吸引游客的重要元素。随着技术的不断进步,音乐喷泉已从简单的喷水表演发展…

2025年知名的薄型液压缸,多级液压缸实力厂家TOP推荐榜

2025年知名的薄型液压缸、多级液压缸实力厂家TOP推荐榜在工业自动化快速发展的今天,液压系统作为动力传输与控制的关键部件,其性能和质量直接影响着整个设备的运行效率与可靠性。薄型液压缸和多级液压缸因其结构紧凑…