最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue3點(diǎn)擊側(cè)邊導(dǎo)航欄完成切換頁(yè)面內(nèi)組件全過(guò)程(WEB)

 更新時(shí)間:2023年06月12日 11:37:46   作者:li-xun  
寫(xiě)頁(yè)面的時(shí)候都會(huì)用到一些導(dǎo)航欄、點(diǎn)擊不同的部分切換不同的頁(yè)面,下面這篇文章主要給大家介紹了關(guān)于Vue3點(diǎn)擊側(cè)邊導(dǎo)航欄完成切換頁(yè)面內(nèi)組件的相關(guān)資料,需要的朋友可以參考下

效果

點(diǎn)擊左側(cè)導(dǎo)航,右面頁(yè)面切換。

思路

使用router-view顯示點(diǎn)擊后需要切換的組件,需要先完成網(wǎng)頁(yè)的結(jié)構(gòu)。側(cè)面導(dǎo)航 + 頁(yè)面顯示部分

如:

導(dǎo)航加顯示

設(shè)置一個(gè)class屬性,點(diǎn)擊元素時(shí)給當(dāng)前元素額外添加一個(gè)class類(lèi)。給導(dǎo)航中每個(gè)點(diǎn)擊項(xiàng)添加上點(diǎn)擊事件,當(dāng)點(diǎn)擊當(dāng)前項(xiàng)時(shí)其它項(xiàng)的class變成原本的,當(dāng)前元素添加一個(gè)當(dāng)前點(diǎn)擊的class類(lèi),而組件切換則由router完成,使用router-link to 完成路由路徑切換。

當(dāng)前點(diǎn)擊模式類(lèi)代碼:

.isclick {
		background: #e9feff;
		color: #0bbfbc;
	}

過(guò)程

獲取當(dāng)前點(diǎn)擊DOM并添加點(diǎn)擊class

這里需要注意,觸發(fā)事件的元素對(duì)象(不一定是綁定事件的對(duì)象,會(huì)因?yàn)槭录芭葑兓晕覀冃枰@取綁定事件的元素對(duì)象。

  • $event:當(dāng)前觸發(fā)的是什么事件
  • $event.target:觸發(fā)事件的元素對(duì)象(不一定是綁定事件的對(duì)象)
  • $event.currentTarget:綁定事件的元素對(duì)象

此處需要使用: e.currentTarget

改變選中元素的class: e.currentTarget.className = ‘nav-item isclick’

其中nav-item為未點(diǎn)擊時(shí)的navitem樣式類(lèi),isclick為點(diǎn)擊后更改的樣式類(lèi),原來(lái)樣式只有一個(gè)nav-item,再添加一個(gè)isclick。

將其它的導(dǎo)航未點(diǎn)擊項(xiàng)isclick樣式類(lèi)去除

得到點(diǎn)擊項(xiàng)的其它兄弟節(jié)點(diǎn)

var domList = e.currentTarget.parentNode.children

parentNode 是得到父節(jié)點(diǎn)

children 是得到子節(jié)點(diǎn)

當(dāng)前元素的父節(jié)點(diǎn)的所有子節(jié)點(diǎn),是一個(gè)列表

將所有節(jié)點(diǎn)的點(diǎn)擊樣式類(lèi)去除

for(let d=0;d<domList.length;d++){
	domList[d].className = 'nav-item'
}

遍歷當(dāng)前所有節(jié)點(diǎn)的兄弟節(jié)點(diǎn),并修改class。

完整代碼

導(dǎo)航代碼

導(dǎo)航組件代碼:

<template>
	<div class="nav">
		<ul>
			<li v-for="item in NavList" class="nav-item" @click="clickNav($event)">
				<div>
					<img class="nav-icon" :src="item.icon" width="20px" height="20px" alt="sy" />
					<router-link :to="item.url">{{item.title}}</router-link>
				</div>
			</li>
		</ul>
		<div class="nav-img-box" style="margin-top: 108px;">
			<img src="@/assets/裝飾圖.png" alt="zs" />
		</div>
	</div>
</template>
<script setup>
import { ref,reactive } from 'vue'
var NavList = reactive([
	{
		title: "合作伙伴",
		url: "/partner",
		icon: require("@/assets/首頁(yè)-選中.png")
	},
	{
		title: "客戶(hù)列表",
		url: "/customer",
		icon: require("@/assets/客戶(hù)列表.png")
	},
	{
		title: "訂單列表",
		url: "/order",
		icon: require("@/assets/財(cái)務(wù)列表.png")
	},
	{
		title: "物料列表",
		url: "/materials",
		icon: require("@/assets/標(biāo)簽列表.png")
	},
	{
		title: "成員管理",
		url: "/corpuser",
		icon: require("@/assets/員工列表.png")
	},
	{
		title: "收益概覽",
		url: "/income",
		icon: require("@/assets/員工列表.png")
	},
	{
		title: "價(jià)格配置",
		url: "/price",
		icon: require("@/assets/員工列表.png")
	},
	{
		title: "系統(tǒng)設(shè)置",
		url: "/setting",
		icon: require("@/assets/員工列表.png")
	}
])
function clickNav(e) {
	var domList = e.currentTarget.parentNode.children
	for(let d=0;d<domList.length;d++){
		domList[d].className = 'nav-item'
	}
	console.log('點(diǎn)擊',e.currentTarget)
	e.currentTarget.className = 'nav-item isclick'
}
</script>
<style scoped>
	li {
		list-style-type: none;
	}
	a {
		text-decoration: none;
		color: #39475A;
	}
	.nav {
		width: 200px;
		height: 100%;
		background: #FFFFFF;
		box-shadow: 3px 0px 6px 0px rgba(82, 82, 82, 0.14);
	}
	.nav ul {
		margin-top: 32px;
		padding: 0;
	}
	.nav-item {
		width: 200px;
		height: 46px;
		font-family: PingFangSC-Medium;
		font-size: 16px;
		color: #39475A;
		letter-spacing: 0;
		line-height: 46px;
		font-weight: 500;
	}
	.nav-item div {
		margin-left: 17px;
		height: 46px;
		line-height: 46px;
	}
	.nav-item div img {
		width: 20px;
		height: 20px;
	}
	.nav-icon {
		vertical-align: middle;
		margin-right: 7px;
		padding-bottom: 6px;
	}
	.isclick {
		background: #e9feff;
		color: #0bbfbc;
	}
	.nav-img-box img {
		width: 200px;
		height: 416px;
	}
</style>

代碼中的icon: require(“@/assets/員工列表.png”)為導(dǎo)航圖標(biāo),需要注意,如果不用require,直接寫(xiě)圖片的地址的話(huà)可能出現(xiàn)無(wú)法找到圖片的問(wèn)題,圖片的地址在html中使用時(shí)會(huì)被轉(zhuǎn)碼,出現(xiàn)類(lèi)似%E9%A6%96%E9%A1%B5-%E9%80%89%E4%B8%AD.png的情況。

顯示頁(yè)面代碼

<template>
  <div class="page-body">
      <PageNav></PageNav>
      <router-view />
  </div>
  <div class="bottom">
    <PageBottom></PageBottom>
  </div>
</template>
<script setup>
import PageNav from "@/components/PageNav"
import PartnerView from "@/views/PartnerView"
import PageBottom from "@/components/PageBottom.vue"
</script>
<style scoped>
.page-body {
  display: flex;
}
</style>

其中PageNav為前面的導(dǎo)航代碼

路由設(shè)置

router.js中代碼如下

import { createRouter, createWebHistory } from 'vue-router'
import PartnerView from '../views/PartnerView.vue'
import CustomerView from '../views/CustomerView.vue'
import OrderView from '@/views/OrderView'
import MaterialsView from '../views/MaterialsView'
import CorpUserView from '@/views/CorpUserView'
import InComeView from '@/views/InComeView'
import PriceView from '@/views/PriceView'
import SettingView from '@/views/SettingView'
const routes = [
  {
    path: '/',
    name: 'index',
    component: PartnerView,
    redirect: 'partner',
  },
  {
    path: '/partner',
    name: 'partner',
    component: PartnerView
  },
  {
    path: '/customer',
    name: 'customer',
    component: CustomerView
  },
  {
    path: '/order',
    name: 'order',
    component: OrderView
  },
  {
    path: '/materials',
    name: 'materials',
    component: MaterialsView
  },
  {
    path: '/corpuser',
    name: 'corpuser',
    component: CorpUserView
  },
  {
    path: '/income',
    name: 'income',
    component: InComeView
  },
  {
    path: '/price',
    name: 'price',
    component: PriceView
  },
  {
    path: '/setting',
    name: 'setting',
    component: SettingView
  }
]
const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})
export default router

總結(jié)

到此這篇關(guān)于Vue3點(diǎn)擊側(cè)邊導(dǎo)航欄完成切換頁(yè)面內(nèi)組件的文章就介紹到這了,更多相關(guān)Vue3切換頁(yè)面內(nèi)組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue3實(shí)現(xiàn)ai聊天對(duì)話(huà)框功能

    vue3實(shí)現(xiàn)ai聊天對(duì)話(huà)框功能

    這篇文章主要介紹了vue3實(shí)現(xiàn)ai聊天對(duì)話(huà)框功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2024-12-12
  • vue長(zhǎng)按事件touch示例詳解

    vue長(zhǎng)按事件touch示例詳解

    這篇文章主要介紹了vue長(zhǎng)按事件touch,文末給大家補(bǔ)充介紹了Vue長(zhǎng)按觸摸事件的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Vue.js實(shí)現(xiàn)高質(zhì)量翻頁(yè)功能的完整開(kāi)發(fā)指南

    Vue.js實(shí)現(xiàn)高質(zhì)量翻頁(yè)功能的完整開(kāi)發(fā)指南

    當(dāng)我們?cè)诰W(wǎng)頁(yè)中展示大量數(shù)據(jù)時(shí),分頁(yè)能幫助用戶(hù)快速瀏覽內(nèi)容,提高頁(yè)面的加載性能和用戶(hù)體驗(yàn),本文將從基礎(chǔ)翻頁(yè)功能入手,逐步升級(jí)至可復(fù)用的分頁(yè)組件,并提供性能優(yōu)化和用戶(hù)體驗(yàn)提升的實(shí)用建議,需要的朋友可以參考下
    2025-07-07
  • vue3.0 自適應(yīng)不同分辨率電腦的操作

    vue3.0 自適應(yīng)不同分辨率電腦的操作

    這篇文章主要介紹了vue3.0 自適應(yīng)不同分辨率電腦的操作,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • vue?this.$router和this.$route區(qū)別解析及路由傳參的2種方式?&&?this.$route的各種語(yǔ)法

    vue?this.$router和this.$route區(qū)別解析及路由傳參的2種方式?&&?this.$route

    this.$router?相當(dāng)于一個(gè)全局的路由器對(duì)象,包含了很多屬性和對(duì)象(比如?history?對(duì)象),任何頁(yè)面都可以調(diào)用其?push(),?replace(),?go()?等方法,本文給大家介紹Vue中this.$router與this.$route的區(qū)別?及push()方法,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • 詳解基于vue-cli配置移動(dòng)端自適應(yīng)

    詳解基于vue-cli配置移動(dòng)端自適應(yīng)

    本篇文章主要介紹了詳解基于vue-cli配置移動(dòng)端自適應(yīng),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 解決iView Table組件寬度只變大不變小的問(wèn)題

    解決iView Table組件寬度只變大不變小的問(wèn)題

    這篇文章主要介紹了解決iView Table組件寬度只變大不變小的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • vue.config.js中的devServer使用

    vue.config.js中的devServer使用

    這篇文章主要介紹了vue.config.js中的devServer使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 解決Antd輸入框卡頓問(wèn)題以及Pubsub.js的使用方式

    解決Antd輸入框卡頓問(wèn)題以及Pubsub.js的使用方式

    這篇文章主要介紹了解決Antd輸入框卡頓問(wèn)題以及Pubsub.js的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Vue 2源碼解析HTMLParserOptions.start函數(shù)方法

    Vue 2源碼解析HTMLParserOptions.start函數(shù)方法

    這篇文章主要為大家介紹了Vue 2源碼解析HTMLParserOptions.start函數(shù)方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評(píng)論

宣武区| 澳门| 南汇区| 枞阳县| 武胜县| 霍邱县| 九龙城区| 乐业县| 香格里拉县| 梨树县| 新龙县| 麟游县| 汪清县| 米易县| 苗栗县| 囊谦县| 延吉市| 绥滨县| 萝北县| 英超| 游戏| 绥芬河市| 普陀区| 科尔| 陆良县| 陆丰市| 尼木县| 新兴县| 万宁市| 双城市| 奉节县| 衡阳县| 阳原县| 维西| 游戏| 广宁县| 辽宁省| 聂拉木县| 开鲁县| 台山市| 论坛|