单页面应用,意思是只有一个html,变化的内容是不同组件进行切换,每个组件加载网络请求,渲染对应的数据,这个内容就是学习怎么完成组件切换
以网易云音乐为例:
网易云音乐 (163.com)
现在无需注册,每个组件应该有一个对应的链接,这个用vuerouter来描述
声明路由链接和占位标签:
<router-link>声明路由链接,<router-view>声明路由占位符,在根页面写:
<template><div id="app"><!--声明路由链接--><router-link to="/discover">发现音乐</router-link><router-link to="/my">我的音乐</router-link><router-link to="/friends">关注</router-link> <!--声明路由占位标签--><router-view></router-view></div>
</template>
这只是简单的定义了几个链接, 这几个链接和对应的xxx.vue怎么连起来呢?对应关系的设置比较复杂,可以放到单独的js文件中,最后记得导出
import VueRouter from "vue-router";
import Vue from "vue";
import Discover from '../components/Discover.vue'
import Friends from '../components/Friends.vue'
import My from '../components/My.vue'
Vue.use(VueRouter)const router = new VueRouter({//指定hash属性与对应组件的关系routes: [{path:'/discover', component: Discover},{path:'/friends', component: Friends},{path:'/my', component: My},]
})export default router
流程:在页面点击“发现音乐”,链接就会转到/discover,然后根据js的路由定义,加载Discover组件,最后将这个组件渲染到路由占位标签那边。记得在main.js里面导入这个文件
import Vue from 'vue'
import App from './App.vue'
import router from './router/index.js'Vue.config.productionTip = falsenew Vue({render: h => h(App),router:router//如果名称和值一致,可以只写一个router
}).$mount('#app')
路由重定向
定义:用户访问地址A的时候强制网页跳转到地址C,从而强制展示特定组件
const router = new VueRouter({//指定hash属性与对应组件的关系routes: [{path:'/', redirect: '/discover'}{path:'/discover', component: Discover},{path:'/friends', component: Friends},{path:'/my', component: My},]
})
嵌套路由
假设在discover下面要添加子路由,第一步先加链接:(记得新建toplist和playlist的vue)
<template><div><h1>发现音乐</h1><!--子路由链接--><router-link to="/discover/toplist">推荐</router-link><router-link to="/discover/playlist">歌单</router-link><hr><router-view></router-view></div>
</template>
第二步:写链接和组件的映射部分
const router = new VueRouter({//指定hash属性与对应组件的关系routes: [{path:'/', redirect: '/discover'},{ path:'/discover', component: Discover,children: [{path:'toplist', component: Toplist},{path:'playlist', component: Playlist},]},{path:'/friends', component: Friends},{path:'/my', component: My},]
})
动态路由
比如没有登录就想跳到订单页面