看过很多vue相关的教程,我觉得是讲的人很嗨,不管你听不听得懂,总是自说自话,学的人是没有办法坚持下去,能坚持下去的,扔掉教程自己写一遍完全懵逼,其实vue最大的好处就是组件化开发。那么,vue的学习就得最终回归到组件化里边去,只有去到组件化开发环境中去切实走一遍之前学过的知识点,通过一个项目完全串联,才会领略到vue的强大,否则,我个人认为,如果你对jquery够熟悉,它也足够的优秀!
这一章节我们正式进入vue的周边生态vue-router,正式进入真实项目中学习,串联起之前的所有知识! 如果你还没有创建项目,请看上一张veu/cli相关知识!或者关注CRMEB掘金号查看vue系列文章,我们一起学习,在技术的世界互相碰撞交流!
Vue Router将分为两个部分:
- Vue Router基本使用(本篇)
- Vue Router动态传参及导航守卫(下篇)
官方解释: vue-router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。
个人总结: vuerouter是vue的一个路由系统,一个路由地址对应一个组件,采用的是html5的 history 和 锚链接 的方式进行组装跳转。
history和锚链接的概念这里不做过多解释,在vue里的表现形式就是链接里有没有#号的区别,但其内在肯定是有不同的,具体大家有兴趣可自行去了解下,我这里要说的是,上边提到了一个路由的概念,那么什么是路由?
什么是路由?路由一词相信生活中常听到的就是路由器,一个路由器可以连接多台电脑,供多台电脑同时联网,这是因为路由器可以生成多个网络地址,一个网络地址对应一台电脑,这就构成了一个端到端的网络路径!
web里的路由原理也是类似的,根据URL来将请求分配到指定的一个‘端’,那么在vue里充当这个端的就是组件。简单理解下路由的概念就是这样,具体专业的解释,大家可以去百度百科了解下,这里就不做过多专业名词的搬运,希望通过我的理解能给大家带来一些启发!
VueRouter的基本配置在上一章我们通过vue-cli创建项目的时候,我们已经勾选默认安装了vue-router,在项目的src文件夹下有个router的文件夹,文件夹内部有个index.js的文件,这里放的就是vue-router相关配置的地方:
通过这个我们就可以梳理出一个简单的vue-router的使用流程,当然,如果你通过vue-cli创建项目时默认勾选,那以下步骤都可以省略!
- 安装vue-router
npm install vue-router复制代码
- 在src文件夹下创建一个router文件夹,再在其内部创建一个index.js文件,引入如下内容:
// src/router/index.js// 1. 引入vue和VueRoterimport Vue from "vue";import VueRouter from "vue-router";// 这里引入的Home是我们提前在views文件夹下创建的组件import Home from "../views/Home.vue";// 2. 注册VueRoterVue.use(VueRouter);// 3. 创建一个VueRouter对象const routes = [ {path: "/", // 路由的路径name: "Home", // 组件名称component: Home // 关联的组件名称 }, {path: "/about",name: "About",// 路由的懒加载写法,该组件会被延迟加载,推荐这样写component: () => import(/* webpackChunkName: "about" */ "../views/About.vue") } ];// new一个VueRouterconst router = new VueRouter({ mode: "history", // 指定用什么方式跳转路由 base: process.env.BASE_URL, routes });// 4. 导出router对象export default router;复制代码
- 在入口文件main.js中注册router
// main.jsimport Vue from "vue";import App from "./App.vue";import router from "./router"; // 导入routerVue.config.productionTip = false;new Vue({ router, // 注册router render: h => h(App) }).$mount("#app");复制代码
经过以上三个步骤就正式在项目中引入了vue-router,在代码中我都做了注释,大家看着注释了解下!其实当安装完vue-router,也就是步骤一之后,我们还可以通过一个命令自动帮我们引入这些,但前提是你必须实现备份原来的,否则会覆盖!
vue add router复制代码VueRouter的基本使用
- 基本使用
老规矩,翠花上代码:
<!-- src/App.vue --><template> <div id="app"><div id="nav"> <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link></div><router-view/> </div></template>复制代码
这是vue-cli创建项目的时候默认在App.vue入口文件中自动生成的,可以看出,VueRouter 通过 router-link 组件来进行导航,通过 to 属性指定导航的链接,<router-link> 默认会被渲染成一个 <a> 标签。然后声明了一个router-view组件作为路由的出口,路由匹配到的组件将渲染到 <router-view></router-view> 标签中。
那么这两个路由地址其实对应的就是我们在router/index.js中的routes中指定的路由列表!
- 代码方式跳转
以上例子还可以通过编码的方式使用路由!
老规矩,翠花上代码:
<!-- src/App.vue --><template> <div id="app"><div id="nav"><!-- <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> --> <button @click="homeClick">首页</button> <button @click="aboutClick">关于</button></div><router-view/> </div></template><script>export default { name: 'App', // 代码方式跳转 methods: {homeClick(){ // this.$router.push('/') this.$router.replace('/') },aboutClick(){ // this.$router.push('/about') this.$router.replace('/about') } }, }</script>复制代码
路由还可以通过在methods中定义一个方法来跳转路由,采用this.$router.push()或this.$router.replace()的方式注册!
- 区别:
$router.push(); 本质是向history栈中添加一个路由,在我们看来是切换路由,但本质是在添加一个history记录!
$router.replace(); 替换路由,没有历史记录,点击返回,会跳转到上上一个页面!