vue 填坑系列总结——scoped

简介: 在上个月份的一次使用vue的项目开发的过程中发现了一个很诡异的现象,就是我在 中写样式时发现样式突然间不起作用了,这是为什么?填坑步骤1.当时我首先想到的是缓存问题,所以果断的按住ctrl + shift + del键,清除缓存,但是我发现‘然并卵’;2.

在上个月份的一次使用vue的项目开发的过程中发现了一个很诡异的现象,就是我在<style lang="stylus" scoped> </style>中写样式时发现样式突然间不起作用了,这是为什么?

填坑步骤

1.当时我首先想到的是缓存问题,所以果断的按住ctrl + shift + del键,清除缓存,但是我发现‘然并卵’;

2.这时我恍然大悟,我使用的是vue-cli开发者模式,当我修改样式的话,vue运行环境会及时的帮我重新编译的,我顿时明白过来,真正的原因并不是这个样子;

3.由于我当时刚接触stylus不久,听一些大牛说这个css预处理器有多么的优秀,因此就在所做的的项目里进行尝试,对于非mvvvm项目我使用了webpack搭建了一个环境对css使用stylus完全没有问题,而对于mvvm项目是初次尝试,所以想当然的我就认为是stylus的编译问题,认为用webpack使用stylus处理css在mvvm项目中存在bug,于是乎想到的就是Google查找解决方案,很遗憾没有我想要的结论,这时我想了一个解决方案就是使用sass或者less来处理,由于从我毕业后首先接触到的是sass,所以,我就将使用stylus风格写的代码改为了sass风格的代码,而且也很快的完成了,然后就是输入npm run dev 命令,结果发现还是原来的效果,当时我的第一感觉就是崩溃;

4.没得办法了,不行,作为一名‘一不怕苦,二不怕累,三……’,岂能被这点小困难难倒,办法还是有的,打开chrome浏览器的调试工具,如下图(pic - 1) 我们单击‘+’可以添加新的样式规则body{}在这里写入我们所需要的样式,结果令人很满意,我到了我想要的结果,但为什么使用webpack编译后的结果没有达到我们所想要的结果呢?


img_5ff7ee842ece72d8c027816926f02b9f.png
pic-1

5.接下来,我们所要做的就是排查故障的位置了,在这里我们要感谢现在的浏览器开发商给我们提供的强大工具开发者工具了,废话不多说进入正题,寻找故障原因;

首先, 按住 Ctrl + shit + c 键,单击鼠标左键选中目的元素,则开发工具面板中就会出现目的元素的样式,然后单击样式后面的样式源地址,面板中就会出现正常的样式的根目录。查看相应的的情况。
其次,上面的是我们在做兼容性处理,或者样式查找,微调时,使用的方法,但在mvvm组件化开发的项目中,你能找到未覆盖的样式,但很难找到目的元素样式的,我们该怎么办,很简单我们只要找该组件中起效的样式即可。
下面列几张图说明一下上面的情况:

项目问题1: 图标和字体间的艰巨过大(这个是我在项目中需要解决的问题)


img_6dd6cebff1070fa88da2bd134272ee5f.png
pic-2

测试问题2:只能找到你要覆盖的样式的位置,而不能找到你写的覆盖样式的位置
我们要找的是这样的样式的位置

img_db66ad66ea589dfa12c5fbf84e6a9af8.png
pic-3

按照惯性思维找到的确是这样的

img_2dfeb78abf9048cc0a208f7d4b91fe70.gif
pic-4

最后,我们会发现在样式中会有这样的一句代码
.dynamic .mu-item.show-left[data-v-5b8a484c] {
padding-left: 56px;
}

如果我们把show-left后的[data-v-5b8a484c]去掉,就会发现效果如我们所需要的那样,但是我们会发现如果这样的话我们就会影响其他页面的样式,我们的样式就变成了对整个项目都其作用的样式,所以,我们现在应该明白了,出问题的地方时哪里了吧。

结论与总结

问题就在于我们使用的scoped属性,它的存在可以让我们的组件的样式保持独立性,但同时使用scoped也存在一个问题,就是我们不应该在项目中定义重复的样式规则名称。讲到这里scoped的填坑应该结束了,但是我想有部分童鞋可能会有这样的想法我在做项目时不时用相同的规则名进行样式覆盖不就可以了,可是我想说的是我们在项目开发的过程中这样的问题我们并不能,完全避免,特别是我们使用前端框架进行开发时这种问题就不可避免,说到这里,我就为大家推荐两款我是用着比较方便的vue框架,第一个是element UI,muse-ui,再补充一句有逼格的话‘武器虽好,但技术更重要’。

vue框架使用体会

1.要慎用框架,结合自己项目的情况选择合适的框架;
2.使用框架要充分了解框架,了解框架有哪些模块组成,了解框架的优缺点,使用框架的优点,回避框架的缺点,针对框架的不足我们最好要有自己的一套健壮的解决方案,否则慎用;
3.针对第二点,我们在开发的过程中由于考虑不足,或者项目业务的变化,而产生了心得问题,让框架暴露出了新的问题,我们要有较强的纠错能力,这时就是考验我们基本功的时候了,所以,我们要充分的了解vue,知晓vue的工作原理,理解vue每个组成部分的意义和作用;
4.由于使用vue-cli开发是一个需要了解webpack,node.js, vue ,以及所使用的vue框架的情况,所以js这一关我们必须过,然后就是,了解webpack,node.js,当然node.js是一个很好的容器,里面包含了各种有趣的插件,有兴趣的童鞋不妨尝试一下~

最后,送大家一句话‘路漫漫其修远兮,吾将上下而求索’,努力吧,少年!

相关文章
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
300 2
|
1月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
280 137
|
5月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
769 0
|
7月前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
1007 4
|
5月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
6月前
|
JavaScript 数据可视化 前端开发
基于 Vue 与 D3 的可拖拽拓扑图技术方案及应用案例解析
本文介绍了基于Vue和D3实现可拖拽拓扑图的技术方案与应用实例。通过Vue构建用户界面和交互逻辑,结合D3强大的数据可视化能力,实现了力导向布局、节点拖拽、交互事件等功能。文章详细讲解了数据模型设计、拖拽功能实现、组件封装及高级扩展(如节点类型定制、连接样式优化等),并提供了性能优化方案以应对大数据量场景。最终,展示了基础网络拓扑、实时更新拓扑等应用实例,为开发者提供了一套完整的实现思路和实践经验。
834 77
|
4月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
403 1
|
4月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
259 0
|
7月前
|
缓存 JavaScript 前端开发
Vue 基础语法介绍
Vue 基础语法介绍
|
5月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
465 17