利用vue-router實(shí)現(xiàn)二級(jí)菜單內(nèi)容轉(zhuǎn)換
二級(jí)菜單導(dǎo)航是一種很普遍的功能,一般網(wǎng)頁(yè)都會(huì)有這個(gè)功能。如果是平常的做法就是改變url,跳到相應(yīng)的頁(yè)面;還有一種就是frame。
如果用vue的話(huà),可以用vue-router改變<router-view>里面的組件,這樣就能做到不刷新頁(yè)面都能跳到相應(yīng)“頁(yè)面”。其實(shí)url地址還是變了,但是他沒(méi)有刷新頁(yè)面其他位置的內(nèi)容,只是改變了<router-view>里面的組件,渲染了新的組件。
在線(xiàn)demo:http://runjs.cn/code/9th3cgxo
html
使用 Vue.js 時(shí),我們就已經(jīng)把組件組合成一個(gè)應(yīng)用了,當(dāng)你要把 vue-router 加進(jìn)來(lái),只需要配置組件和路由映射,然后告訴 vue-router 在哪里渲染它們。
<div id="app"> <div class="leftBox"> <!-- 使用 router-link 組件來(lái)導(dǎo)航. --> <!-- 通過(guò)傳入 `to` 屬性指定鏈接. --> <!-- <router-link> 默認(rèn)會(huì)被渲染成一個(gè) `<a>` 標(biāo)簽 --> <ul> <li><router-link to="/" actived>首頁(yè)</router-link></li> <li><router-link to="/article">文章</router-link></li> <li><router-link to="/picture">圖片</router-link></li> <li><router-link to="/music">音樂(lè)</router-link></li> </ul> </div> <div class="rightBox"> <!-- 路由出口 --> <!-- 路由匹配到的組件將渲染在這里 --> <router-view></router-view> </div> </div>
js
定義路由。每個(gè)路由應(yīng)該映射一個(gè)組件。 其中”component” 可以是組件等。 創(chuàng)建和掛載根實(shí)例。記得要通過(guò) router 配置參數(shù)注入路由,從而讓整個(gè)應(yīng)用都有路由功能
var Home = {template: '<div>home</div>'}
var router = new VueRouter({
routes: [
{path: '/', component: Home},
{path: '/picture', component: Picture},
{path: '/music', component: Music},
{path: '/article', component: Artlist},
{path: '/article/:id', component: Article}
]
})
new Vue({
el: "#app",
router: router
})
切換到了文章部分時(shí),我又弄了個(gè)文章列表,點(diǎn)擊文章標(biāo)題才進(jìn)入文章內(nèi)容。
- 這里我寫(xiě)死了數(shù)據(jù),實(shí)際可以通過(guò)ajax拿到數(shù)據(jù)賦值。
- 我模擬了loading…,根據(jù)數(shù)據(jù)驅(qū)動(dòng)的思維,通過(guò)v-if="loading"來(lái)判斷這個(gè)loading是否出現(xiàn)。
- 動(dòng)畫(huà)切換記得要指定不同的key,不然是沒(méi)有效果的。
- 創(chuàng)建和改變路由的時(shí)候,都要通過(guò)傳遞url的參數(shù)去一個(gè)方法拿到數(shù)據(jù),這里就要created和watch '$route'
- 拿url參數(shù)是通過(guò)$route.params或$route.query等,具體看教程
- 返回上一級(jí)是用router.go(-1),相當(dāng)于按退回按鈕
var Article = {
template: '<div class="post">\
<div class="loading" v-if="loading">loading.....</div>\
<transition name="slide">\
<div v-if="post" class="content" :key="post.id">\
<button @click="back">返回</button>\
<p>{{post.title}}</p>\
<P>{{post.body}}</P>\
</div>\
</transition>\
</div>',
data: function() {
return {
loading: false,
error: null,
post: null
}
},
created:function() {
this.fetchData();
},
watch: {
'$route': 'fetchData'
},
methods: {
fetchData:function () {
this.error = this.post = null;
this.loading = true;
getPost(this.$route.params.id,(err,post) => {
this.loading = false;
if(err) {
this.error = err.toString();
}else {
this.post = post
}
})
},
back: function() {
router.go(-1);
}
}
}
本文已被整理到了《Vue.js前端組件學(xué)習(xí)教程》,歡迎大家學(xué)習(xí)閱讀。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Vue.js組件tree實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形菜單
- vue2.0使用v-for循環(huán)制作多級(jí)嵌套菜單欄
- vue多級(jí)多選菜單組件開(kāi)發(fā)
- vue.js 左側(cè)二級(jí)菜單顯示與隱藏切換的實(shí)例代碼
- Vue2組件tree實(shí)現(xiàn)無(wú)限級(jí)樹(shù)形菜單
- Vue iview-admin框架二級(jí)菜單改為三級(jí)菜單的方法
- vue二級(jí)菜單導(dǎo)航點(diǎn)擊選中事件的方法
- vue單個(gè)組件實(shí)現(xiàn)無(wú)限層級(jí)多選菜單功能
- vue側(cè)邊欄動(dòng)態(tài)生成下級(jí)菜單的方法
- vue.js實(shí)現(xiàn)二級(jí)菜單效果
相關(guān)文章
詳解vue-cli 腳手架項(xiàng)目-package.json
本篇文章主要介紹了詳解vue-cli 腳手架項(xiàng)目-package.json,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
vue的路由守衛(wèi)和keep-alive后生命周期詳解
這篇文章主要為大家詳細(xì)介紹了vue路由守衛(wèi)和keep-alive,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-03-03
vue實(shí)現(xiàn)多個(gè)echarts根據(jù)屏幕大小變化而變化實(shí)例
這篇文章主要介紹了vue實(shí)現(xiàn)多個(gè)echarts根據(jù)屏幕大小變化而變化實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07
Vue使用provide各種傳值后inject獲取undefined的問(wèn)題及解決
這篇文章主要介紹了Vue使用provide各種傳值后inject獲取undefined的問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue下載excel的實(shí)現(xiàn)代碼后臺(tái)用post方法
這篇文章主要介紹了vue下載excel的實(shí)現(xiàn)代碼,后臺(tái)用post方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-05-05
Vuex,iView UI面包屑導(dǎo)航使用擴(kuò)展詳解
今天小編就為大家分享一篇Vuex,iView UI面包屑導(dǎo)航使用擴(kuò)展詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11

