SPA
SPA是什么
单页Web应用
(single page application,SPA),就是只有一个Web页面
的应用,
是加载单个HTML页面,并在用户与应用程序交互时动态更新
该页面的Web应用程序
单页面应用程序:
只有第一次
会加载页面, 以后的每次请求, 仅仅是获取必要的数据
.然后,由页面中js
解析获取的数据, 展示在页面中
传统多页面应用程序:
对于传统的多页面应用程序来说, 每次请求服务器返回的都是一个完整的页面
单页面应用程序的优势
:
减少了请求体积,加快页面响应速度,降低了对服务器的压力
SPA实现思路和技术点
1 ajax
2 锚点的使用(window.location.hash #)
3 hashchange 事件
window.addEventListener("hashchange",function () {})
4 监听锚点值变化的事件,
根据不同的锚点值,请求相应的数据
5 原本用作页面内部进行跳转,
定位并展示相应的内容
通过vue的路由可实现多视图的单页Web应用(基于html的SPA)
1、引入依赖库
2、创建自定义组件,例如:Home和Abort组件
extend
是构造一个组件的语法器
. 你给它参数,他给你一个组件,然后这个组件 你可以作用到Vue.component这个全局注册方法里,也可以在任意vue模板里使用car组件
const Home = Vue.extend({});
3、定义路由(即路线)
/
代表根路径
var routes = [{path: '/about',component: About}];
4、创建路由器实例,然后传 routes
配置
注1:route和router的区别
route:路线
router:路由器
路由器中包含了多个路线
const router = new VueRouter({routes:routes});
5、创建和挂载根实例。
var vm = new Vue({router: router}).$mount('#app');
6、前面使用RouterLink和RouterView组件导航和显示
<!-- 使用RouterLink组件导航. -->
<!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
<!-- 通过传入 `to` 属性指定链接. -->
<router-link to="/home">go to Home</router-link>
<!-- 使用RouterView组件显示. -->
<router-view></router-view>
router-link
表示路由导航
replace
无痕浏览
tag
可改变router-link标签原有的类型
代码示例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>vue路由</title>
<!-- 1.引入标签库 -->
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.11/vue.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/vue-router/3.4.2/vue-router.js"></script>
</head>
<body>
<div id="app">
<router-link to="/Home" replace tag="button" >首页</router-link>
<router-link to="/About">关于我们</router-link>
<br />
<!-- vue中导航中的后退-前进-编程式导航 -->
<div>
<button @click="prev">前一页</button>
<button @click="next">后一页</button>
<button @click="change">跳转指定页面</button>
</div>
<!-- 6.定义锚点 router-view表示路由显示区域 -->
<router-view></router-view>
</div>
</body>
<script type="text/javascript">
//2.创建自定义组件
const Home=Vue.extend({
template:'<div><h2>Home</h2><div>首页所展示的组件内容</div></div>'
});
const About = Vue.extend({
template:'<div><h2>About</h2><div>About组件内容</div></div>'
});
//3.定义路由
var routes = [
{name:'home',path:'/Home',component:Home},
{path:'/About',component:About}
]
//4.定义路由器
const router = new VueRouter({routes});
//5.将vue挂载到vue实例里
var vue=new Vue({
router:router,
data:function(){
return{
}
},
methods:{
prev:function(){
console.log("前一页的方法被调用!");
this.$router.go(-1);
},
next:function(){
console.log("后一页的方法被调用!")
this.$router.go(1);
},
change:function(){
console.log("跳转到指定页面的方法被调用!");
this.$router.push({
name:'home'
});
}
}
}).$mount("#app");
</script>
</html>
效果展示
router-link相关属性
1 to
表示目标路由的链接
<router-link to="/home">Home</router-link><!-- 字符串 -->
<router-link v-bind:to="'home'">Home</router-link><!-- 使用 v-bind 的 JS 表达式 -->
2 replace
设置 replace 属性的话,当点击时,会调用 router.replace() 而不是 router.push(),导航后不会留下 history 记录。
<router-link :to="{ path: '/home'}" replace></router-link>
vue中导航中的后退-前进-编程式导航
this.$router.go(-1) :代表着后退
this.$router.go(1):代表着前进
this.$router.push({ 切换到name为home的路由
name:'home'
});
3 append
<bese href="${pageContext.request...}/">
<script type="..." href="/EasyUI/jquery.js"></script>
<link src="....css">
设置 append 属性后,则在当前 (相对) 路径前添加基路径。例如,我们从 /a 导航到一个相对路径 b,如果没有配置 append,则路径为 /b,如果配了,则为 /a/b
<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>