目录
三:通过vue的路由可实现多视图的单页Web应用(基于html的SPA)
④: 创建路由器实例,然后传 `routes` 配置(路由器包含多条路由)
⑥:使用RouterLink和RouterView组件导航和显示
replace:设置 replace 属性的话,当点击时,会调用 router.replace() 而不是 router.push(),导航后不会留下 history 记录
append:设置 append 属性后,则在当前 (相对) 路径前添加基路径。例如,我们从 /a 导航到一个相对路径 b,如果没有配置 append,则路径为 /b,如果配了,则为 /a/b
active-class: 设置 链接激活时使用的 CSS 类名
exact-active-class 配置当链接被精确匹配的时候应该激活的 class
event:声明可以用来触发导航的事件。可以是一个字符串或是一个包含字符串的数组
路由的本质就是一种对应关系,比如说我们在url地址中输入我们要访问的url地址之后,浏览器要去请求这个url地址对应的资源,那么url地址和真实的资源之间就有一种对应的关系,就是路由
根据不同的事件来显示不同的页面内容,即事件与事件处理函数之间的对应关系
前端路由主要做的事情就是监听事件并分发执行事件处理函数,主要是依靠hash值(锚链接)的变化进行实现
由服务器端进行实现,并完成资源的分发
SPA(Single Page Application)单页面应用程序,整个页面只有一个页面,内容的变化通过 ajax 局部更新实现,同时支持浏览器地址栏的前进与后退操作,又称单页面多视图。其实现原理是基于 url 地址的hash变化,hash变化会导致浏览器访问记录的变化,但不会触发新的url请求。SPA最核心的技术点就是前端路由。
SPA 还有后端路由渲染和ajax前端渲染两种解决方案,但是后端路由渲染的性能很低,ajax前端渲染,虽然性能高,但不支持浏览器的前进后退操作。
只有第一次会加载页面, 以后的每次请求, 仅仅是获取必要的数据.然后, 由页面中js解析获取的数据, 展示在页面中
对于传统的多页面应用程序来说, 每次请求服务器返回的都是一个完整的页面
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
- <script src="https://cdn.bootcdn.net/ajax/libs/vue-router/3.5.0/vue-router.js">script>
- const Home=Vue.extend({template:'<div><h1>首页h1><div>首页的内容区域div>div>'});
- const About=Vue.extend({template:'<div><h1>关于h1><div>关于的内容区域div>div>'});
- Vue.component("button-counter", {...});//创建组件
- var ButtonCounter = Vue.component('button-counter');//获得组件
- var routes=[
- {name:'Home',path:'/Home',component:Home},
- {name:'About',path:'/About',component:About},
- ];
var router=new VueRouter({routes:routes});
var vm = new Vue({router: router}).$mount('#app');
-
-
-
- <router-link to="/home">go to Homerouter-link>
-
- <router-view>router-view>
- <router-link to="/home">Homerouter-link>
- <router-link v-bind:to="'home'">Homerouter-link>
<router-link :to="{ path: '/home'}" replace>router-link>
- this.$router.go(-1) :代表着后退
- this.$router.go(1):代表着前进
- this.$router.push({ 切换到name为home的路由
- name:'home'
- });
- <base herf="${pageContext.request.contextPath}/"/>
- base标签作用于head标签之间在link和script标签中的href和src属性之前加入
- <base href="/vue04/">
- <script src="js/vue.js">
-
- base中href+script标签中的src /vue04/js/vue.js
-
- <router-link :to="{ path: 'relative/path'}" append>router-link>
- <router-link to="/foo" tag="li">foorouter-link>
-
- <li>fooli>
<router-link v-bind:to = "{ path: '/route1'}" event = "mouseover">Router Link 1router-link>
- html>
- <html>
- <head>
- <meta charset="utf-8" />
- <title>title>
-
- <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js">script>
-
- <script src="https://cdn.bootcdn.net/ajax/libs/vue-router/3.5.0/vue-router.js">script>
- head>
- <body>
- <div id="a">
- <h1>{{ts}}h1>
- <div>
- <button @click="goto">前进button>
- <button @click="back">后退button>
- <button @click="change">切换button>
- div>
- <div>
- <router-link to="/Home">首页router-link>
- <router-link to="/About" replace>关于router-link>
- div>
- <div>
- <router-view/>
- div>
- div>
- body>
- <script>
-
- //1.引入vue.js和vue-router.js
- //2.创建自定义组件
- const Home=Vue.extend({template:'
首页
首页的内容区域'}); - const About=Vue.extend({template:'
关于
关于的内容区域'}); - //3.定义路由(路由即路线)
- var routes=[
- {name:'Home',path:'/Home',component:Home},
- {name:'About',path:'/About',component:About},
- ];
- //4.定义路由器(路由器包含多条路由)
- var router=new VueRouter({routes:routes});
- //5.创建和挂载根实例
- var vm=new Vue({
- //el:'#a',
- router:router,
- data:function(){
- return{
- ts:new Date().getTime()
- }
- },
- methods:{
- goto:function(){
- this.$router.go(1); //history.go(); 前进
- },
- back:function(){
- this.$router.go(-1); //回退
- },
- change:function(){
- this.$router.push('/Home');
- }
- }
- }).$mount('#a');
- script>
- html>