Vue项目中,在不同路由下,组件样式需要改变的解决方案,动态监听路由变化。

Posted 安小蒋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue项目中,在不同路由下,组件样式需要改变的解决方案,动态监听路由变化。相关的知识,希望对你有一定的参考价值。

        在项目中遇到一个问题,当进入不同的路由时,根组件的导航栏样式需要改变。

        在主界面时,导航栏样式应为:

        在其他界面时,导航栏样式应为:

        最初解决方案:

        一开始想到的解决方案是,当其他界面的组件创建时,向根组件传递数据,改变导航栏样式(导航栏写在了根组件中) 。

        弊端:①实现起来比较困难;②需要给许多组件配置这个方案,很麻烦

        最终解决方案:

        在需要修改的组件中,通过v-bind指令动态绑定导航栏属性

        初始化样式,且通过this.$route.fullPath来获取当前的地址。

        

        当地址发生变化时,修改导航栏样式。

        

         此时遇到问题:

        发现 path(this.$route.fullPath) 只能获取到第一次进入网页时的路径,当进入不同路由时,path的值不会改变。比如先进入首页,path的值为'/Home',然后进入文章页,本来期望path的值变为'/Article',从而重新渲染导航栏,但是此时发现path的值不会改变,导致导航栏不会被重新渲染。

        解决办法

        通过watch监听路由对象,当路由对象发生变化时,重新给path赋值,并调用要使用的方法。

        ​​​​​​ 

        问题解决!!!

        总结:

        当路由发生变化,需要重新渲染组件时,可以用一个变量获取当前路径。再使用watch来监听路由变化,当发生变化时,重新给该变量赋值,同时调用需要的方法即可。

以上是关于Vue项目中,在不同路由下,组件样式需要改变的解决方案,动态监听路由变化。的主要内容,如果未能解决你的问题,请参考以下文章

尚品汇项目笔记

vue修改当前页样式不影响公共样式的方法

不同预处理器less、scss等下如何写样式穿透

Vue组件化开发(三)——slot插槽的使用

vue里使用 vue-wechat-title 修改路由的标题

解决vue ssr css内联样式和link标签重复问题