- 21
- 0
环境:vue3 + vue-router4 目标功能:tab切换,实现 字体颜色 和 svg图标 切换。代码逻辑 描述:1, 通过提前设置好.router-link-active的字体颜色,实现字体颜色切换。2,定义响应式tabName,他的值是 router.currentRoute.value.name 当前激活的路有名称,根据tabName值的变化 来 实现 svg图标的切换。问题描述:每次刷新页面之后,都会出现,必须点击N次之后(N = tab.item.length),router.currentRoute.value.name的值,才能正常返回当前active路由的name。在点击次数小于N的情况下,router.currentRoute.value.name的值总是上一个active路由的name。代码如下:<template> <footer class="main-footer" @click="changeTabIndex" @load="changeTabIndex"> <router-link to="home"> <n-icon class="tab-icon" v-show=" tabName !== 'Home' "> <HomeOutline /> </n-icon> <n-icon class="tab-icon" v-show=" tabName === 'Home' "> <Home /> </n-icon> <strong> 主页 </strong> </router-link> <router-link to="new"> <n-icon class="tab-icon" v-show=" tabName !== 'New' " > <BagHandleOutline /> </n-icon> <n-icon class="tab-icon" v-show=" tabName== 'New' " > <BagHandle /> </n-icon> <strong> 新品 </strong> </router-link> <router-link to="hot"> <n-icon class="tab-icon" v-show="tabName == 'Hot'"> <Bonfire /> </n-icon> <n-icon class="tab-icon" v-show="tabName != 'Hot'"> <BonfireOutline /> </n-icon> <strong> 热卖 </strong> </router-link> <router-link to="cart"> <n-icon class="tab-icon" v-show="tabName == 'Cart'"> <Cart /> </n-icon> <n-icon class="tab-icon" v-show="tabName != 'Cart'"> <CartOutline /> </n-icon> <strong> 购物车 </strong> </router-link> <router-link to="my"> <n-icon class="tab-icon" v-show="tabName == 'My'"> <Person /> </n-icon> <n-icon class="tab-icon" v-show="tabName != 'My'"> <PersonOutline /> </n-icon> <strong> 我的 </strong> </router-link> </footer></template><script setup lang="ts">import {ref,onMounted} from 'vue'import {NIcon} from 'naive-ui'import { Home, HomeOutline, BagHandle, BagHandleOutline, Bonfire, BonfireOutline, Cart, CartOutline, Person, PersonOutline } from '@vicons/ionicons5'import {useRouter} from 'vue-router'const tabName = ref('');const router = useRouter();let count = 0;onMounted(()=>{ tabName.value = String(router.currentRoute.value.name);});function changeTabIndex(){ console.log(`第${count++}次单击`); console.log('---', String(router.currentRoute.value.name)); tabName.value = String(router.currentRoute.value.name); console.log(tabName.value);};</script><style lang='scss' scoped>.main-footer-size{ height: $mainFooterHeight; box-sizing: border-box;}.main-footer{ @extend .main-footer-size; display: flex; flex-direction: row; justify-content: space-around; align-items: flex-end; width: 100vw; padding-bottom: 5px; background-color: $mainBgColor; a{ flex: 1; display: flex; flex-direction: column; align-items: center; height: $mainFooterHeight; color: $mainFontColor; strong{ font-size: 13px; line-height: 15px; height: 15px; } } .tab-icon{ flex: 1; font-size: 22px; margin-top: 5px; } .router-link-active{ color: $mainColor; }}</style>https://www.bilibili.com/vide...
0
打赏
收藏
点击回答
- 共 0 条
- 全部回答
-
朱颜未换 普通会员 1楼
在 Vue.js 中,
ref是一个用于在视图元素上引用数据或组件的属性。它在 Vue.js 中用于管理组件的状态和引用数据,例如在计算属性、状态管理、循环引用等场景中使用。以下是一个简单的示例,展示如何在 Vue.js 组件中使用
ref:```vue
Hello, World!
```
在这个示例中,我们定义了一个组件
MyComponent,它包含一个ref属性myDiv。在mounted生命周期钩子中,我们获取myDiv对象,并将其赋值给组件的myDiv属性。然后,我们定义了一个updateText方法,当组件的myDiv属性的值发生更改时,该方法会更新myDiv的文本。在视图中,我们使用一个
v-if标签来检查myDiv是否存在和有一个文本内容。当myDiv存在且有文本内容时,我们显示 "Hello, World!"。如果没有文本内容,视图不会显示 "Hello, World!"。注意:
ref属性的使用方式在 Vue 3 中有所不同。在 Vue 3 中,ref可以直接使用组件的实例属性,例如:```vue
Hello, World!
```
在这个示例中,我们不再使用
ref的组件属性myDiv,而是直接通过this.$refs.myDiv来引用组件实例的myDivData属性。这样,我们可以在视图中直接使用myDivData.text来更新文本内容。
更多回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

