一个html页面
上实现单页面应用优缺点
优点:按需更新性能高,开发效率高,用户体验好
缺点:学习成本,首屏加载慢,不利于SEO
页面按需更新
访问路径
和 组件
的对应关系!访问路径 和 组件的对应关系如何确定呢? 路由
路径
和 组件
的 映射 关系5个基础步骤 (固定)
yarn add [email protected]
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const router = new VueRouter()
new Vue({
render: h => h(App),
router
}).$mount('#app')
2 个核心步骤
匹配关系
)组件显示的位置
)App.vue
Find.vue
发现音乐
发现音乐
发现音乐
发现音乐
Friend.vue
我的朋友
我的朋友
我的朋友
我的朋友
My.vue
我的音乐
我的音乐
我的音乐
我的音乐
main.js
中注册路由import Vue from 'vue'
import App from './App.vue'
// 路由的使用步骤 5 + 2
// 5个基础步骤
// 1. 下载 v3.6.5
// 2. 引入
// 3. 安装注册 Vue.use(Vue插件)
// 4. 创建路由对象
// 5. 注入到new Vue中,建立关联
// 2个核心步骤
// 1. 建组件(views目录),配规则
// 2. 准备导航链接,配置路由出口(匹配的组件展示的位置)
import Find from './views/Find'
import My from './views/My'
import Friend from './views/Friend'
import VueRouter from 'vue-router'
Vue.use(VueRouter) // VueRouter插件初始化
const router = new VueRouter({
// routes 路由规则们
// route 一条路由规则 { path: 路径, component: 组件 }
routes: [
{ path: '/find', component: Find },
{ path: '/my', component: My },
{ path: '/friend', component: Friend },
]
})
Vue.config.productionTip = false
new Vue({
render: h => h(App),
router
}).$mount('#app')
页面组件&复用组件
都是 .vue文件 (本质无区别)
分类开来 更易维护
拆分模块,利于维护
@指代src目录
,可以用于快速引入组件router/index.js
,main.js
再引入这个文件,其他不变import Find from '@/views/Find'
import My from '@/views/My'
import Friend from '@/views/Friend'
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter) // VueRouter插件初始化
// 创建了一个路由对象
const router = new VueRouter({
// routes 路由规则们
// route 一条路由规则 { path: 路径, component: 组件 }
routes: [
{ path: '/find', component: Find },
{ path: '/my', component: My },
{ path: '/friend', component: Friend },
]
})
export default router
import Vue from 'vue'
import App from './App.vue'
import router from './router/index'
Vue.config.productionTip = false
new Vue({
render: h => h(App),
router
}).$mount('#app')
vue-router 提供了一个全局组件 router-link
(取代 a 标签
)
① 能跳转
,配置 to 属性指定路径(必须
) 。本质还是 a 标签 ,to 无需 #
② 能高亮
,默认就会提供高亮类名
,可以直接设置高亮样式
两个高亮类名
模糊匹配 (用的多)
精确匹配
两个高亮类名太长了
,我们希望能定制怎么办?const router = new VueRouter({
routes: [...],
linkActiveClass: "类名1",
linkExactActiveClass: "类名2"
})
在跳转路由时, 进行传值,有两种方式
查询参数传参
动态路由传参
查询参数传参
?参数名=值
”query.参数名
动态路由传参
/参数值
”params.参数名
两种传参方式的区别
查询参数传参 (比较适合传多个参数
)
① 跳转:to=“/path?参数名=值&参数名2=值”
② 获取:$route.query.参数名
动态路由传参 (优雅简洁
,传单个参数比较方便)
/参数值
”params.参数名
热门搜索:
后端培训
前端培训
如何成为前端大牛
搜索关键字: {{ $route.query.key }}
搜索结果:
- .............
- .............
- .............
- .............
import Home from '@/views/Home'
import Search from '@/views/Search'
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter) // VueRouter插件初始化
// 创建了一个路由对象
const router = new VueRouter({
routes: [
{ path: '/home', component: Home },
{ path: '/search/:words', component: Search }
]
})
export default router
热门搜索:
后端培训
前端培训
如何成为前端大牛
搜索关键字: {{ $route.params.words }}
搜索结果:
- .............
- .............
- .............
- .............
path: "/search/:words"
为什么按下面步骤操作,会匹配不到组件,显示空白?"?"
import Home from '@/views/Home'
import Search from '@/views/Search'
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter) // VueRouter插件初始化
// 创建了一个路由对象
const router = new VueRouter({
routes: [
{ path: '/home', component: Home },
{ path: '/search/:words?', component: Search }
]
})
export default router
热门搜索:
后端培训
前端培训
如何成为前端大牛
搜索关键字: {{ $route.params.words }}
搜索结果:
- .............
- .............
- .............
- .............
热门搜索:
后端培训
前端培训
如何成为前端大牛