前端模拟面试练习提升题
这里只是第一步使用router,最简单的一步先踏出去,不涉及动态路由、嵌套路由的使用。
刚听到路由的时候,只能大概知道可能这是与路径和目标有关。
正确的来说,在web开发中,路由是指根据url分配到对应的处理程序。在我看来路由就像是指路牌,在这个url中('http://blog.csdn.net/qq_34131399/article/details/79393260'),我们可以将‘/***’这样的组合看成是我们站在一个有多个方向的路口,具体的如"/article"就是指我们去article的路牌。我们要到目的地要通过多个需要选择的路口,我们走的这一路,将经过的路牌串起来,就是url了。所以为了让我们的程序按照我们规划的路线行进,我们就要用到路由。
这里的路由比起计算机其他方面的路由要简单得多,就是起到对页面组合替换进行源头到目的地的引导作用,就像a标签一样,你点了我,我就带你去指定的地方。
vue中引用路由,我们要在创建项目时点选‘需要vue-router’,也可以后来再安装‘vue-router’,使用npm install vue-router进行安装。
这里说一下router的三个容易混淆的概念:
首先先看一下官方给的代码:
// 0. 如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)
// 1. 定义(路由)组件。
// 可以从其他文件 import 进来
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }
// 2. 定义路由
// 每个路由应该映射一个组件。 其中"component" 可以是
// 通过 Vue.extend() 创建的组件构造器,
// 或者,只是一个组件配置对象。
// 我们晚点再讨论嵌套路由。
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
]
// 3. 创建 router 实例,然后传 `routes` 配置
// 你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({
routes // (缩写)相当于 routes: routes
})
// 4. 创建和挂载根实例。
// 记得要通过 router 配置参数注入路由,
// 从而让整个应用都有路由功能
const app = new Vue({
router
}).$mount('#app')
// 现在,应用已经启动了!
上边有三个长的很像的,分别是router、route、routes,初学很容易就会看混淆。
route:上边示例没有给出但是它是routes的单数形式,就是代表一个指路牌,有一个名字和指向的组件,like this ->{path:'/***',component:***}。
routes:它的后边有个s,所以它就要高级一点,是route的复数形式,是一个route组成的数组,包含一组route。
router:router是一个VueRouter的对象,用来管理路由,所以它内部肯定会有routes属性,还有其他的属性和方法。
当我们要使用时,我们只需要配好路由,把每一个需要的路由配置好,然后将路由挂载到根实例上全局就都可以使用了。
我用vue-cli创建的vue项目,里边就有个完整的vue并且带上路由的结构。
箭头所指就是路由管理的地方。我通常都是把所有的路由配到这里,这样统一管理也比较直观。
写了几个简单的,这里的组件都是.vue文件的组件。
import Vue from 'vue'
import Router from 'vue-router'
//引入.vue组件
import FindBack from '@/components/FindBack'
import AboutUs from '@/components/AboutUs'
import NearbyThing from '@/components/NearbyThing'
import FullForm from '@/components/FullForm'
Vue.use(Router)//声明使用Router
export default new Router({
routes: [
{
path: '/',
redirect:'/a',//重定向
name: 'FindBack',
component: FindBack
},
{
path: '/a',
name: 'FindBack',
component: FindBack
},
{
path: '/c',
name: 'AboutUs',
component: AboutUs
},
{
path: '/b',
name: 'NearbyThing',
component: NearbyThing
}
]
})
因为在main.js文件中已经引入,所以我们就可以直接全局使用了。
使用有两种方法一种是类似a标签的使用,一种是用函数来使用。
1.标签式使用方法
<router-view></router-view> //这里先预留一个坑
<router-link to="/bar">Go to Bar</router-link>//当我们在页面上点击‘Go to Bar’时就将指向的组件填到页面上的坑里
2.函数式(编程式)使用方法
// 字符串 这里的字符串就是url的一个组成部分 比如'/****'
router.push('home')
// 对象
router.push({ path: 'home' })
// 命名的路由
router.push({ name: 'user', params: { userId: 123 }})
// 带查询参数,变成 /register?plan=private
router.push({ path: 'register', query: { plan: 'private' }})
我觉得对于初学者来说,先不考虑后边三种使用方式。不过记得在使用时,我们要import你管理router的js文件。
现在我们来串一串流程:
管理路由的js文件
import Vue from 'vue'
import Router from 'vue-router'
import FindBack from '@/components/FindBack'//一下几个import都是引入.vue的组件文件
import AboutUs from '@/components/AboutUs'
import NearbyThing from '@/components/NearbyThing'
import FullForm from '@/components/FullForm'
Vue.use(Router)//向vue说明 我们要使用路由
export default new Router({
routes: [
{
path: '/',
redirect:'/a',//匹配到这个字符串时我们重定向到'/a'这里来,也就是重新指向一个路由
name: 'FindBack',
component: FindBack
},
{
path: '/a',
name: 'FindBack',
component: FindBack
},
{
path: '/c',
name: 'AboutUs',
component: AboutUs
},
{
path: '/b',
name: 'NearbyThing',
component: NearbyThing
}
]
})
使用路由页面:
<template>
<div id="app">
<router-view v-on:nearbything_="changeBButtomStage"></router-view>
<!-- 这里带参数调用函数 不同参数就匹配不同的路由 -->
<button v-on:click='chooseMe(1)'>1</button>
<button v-on:click='chooseMe(2)'>1</button>
<button v-on:click='chooseMe(3)'>1</button>
</div>
</template>
<script>
import router from "./router";//引入管理router的js文件
export default {
data() {
return {}
},
methods: {
// 根据选择的按钮进行页面跳转 或者 按钮颜色变换
chooseMe: function(i) {
switch (i) {//判断选择哪一个路由
case 1:
router.push("/a");
break;
case 2:
router.push("/b");
break;
case 3:
router.push("/c");
break;
}
}
}
</script>
另外还有其他的组件文件,选择不同路由就将不同的组件塞入预留的坑里。
————————————————
智一面|前端面试必备练习题