Vue-router
URL的hash
URL的hash也就是锚点(#),本质上是改变window.location的href属性
我们可以通过直接赋值location.hash来改变href,但是页面不发生刷新
location.href
"https://www.baidu.com/"
location.hash = '/home'
"/home"
location.href
"https://www.baidu.com/#/home"
HTML5的history模式:
pushStase()
该方法与location.hash类似
在 HTML 文档中,
history.pushState()
方法向当前浏览器会话的历史堆栈中添加一个状态(state)。
history.pushState({}, '', 'home')
undefined
location.href
"https://www.baidu.com/home"
replaceState()
该方法在改变url后不可以前进后退
replaceState()
方法使用state objects
,title
,和URL
作为参数, 修改当前历史记录实体,如果你想更新当前的state对象或者当前历史实体的URL来响应用户的的动作的话这个方法将会非常有用。
history.replaceState({}, '', '/show')
undefined
location.href
"http://io.neepu.edu.cn/show"
back()
back()
方法会在会话历史记录中向后移动一页。如果没有上一页,则此方法调用不执行任何操作。
history.back()
undefined
location.href
"https://www.baidu.com/"
go()
go()
方法从会话历史记录中加载特定页面。你可以使用它在历史记录中前后移动,具体取决于delta
参数的值。
向后移动一页(等价于调用back()
):
window.history.go(-1)
向前移动一页,就像调用了forward()
:
window.history.go(1)
back()
back()
方法会在会话历史记录中向后移动一页。如果没有上一页,则此方法调用不执行任何操作。
forward()
在会话历史中向前移动一页。它与使用
delta
参数为1时调用history.go(delta)
的效果相同。
Vue-router
基本配置
JS配置
如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)
Vue.use(VueRouter);
定义 (路由) 组件。
const Foo = { template: 'foo' }
const Bar = { template: 'bar' }
可以从其他文件 import 进来
import home from "./components/home";
import show from "./components/show";
定义路由
每个路由应该映射一个组件。 其中"component" 可以是
通过 Vue.extend() 创建的组件构造器,
或者,只是一个组件配置对象。
我们晚点再讨论嵌套路由。
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
]
创建 router 实例,然后传
routes
配置
你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({
routes // (缩写) 相当于 routes: routes
})
创建和挂载根实例。
记得要通过 router 配置参数注入路由,
从而让整个应用都有路由功能
const app = new Vue({
router
}).$mount('#app')
设置默认主页
在设置routes时,将默认组件添加为主页
redirect是重定向的意思,也就是把默认页面重定向到home主页
{
path: '/',
redirect: home//组件名称
},
设置HTML5的history模式
如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用
history.pushState
API 来完成 URL 跳转而无须重新加载页面。
需要在定义的router里加一个mode属性,该属性的值为history
const router = new VueRouter({
routes,
mode: "history"
})
将router-link更改成其他标签
router默认生成的是锚点(a)标签
使用tag属性可更改成其它标签
home
show
设置router-link标签点击不可前进回退
默认的方式相当于history
的pushState()
方法
我们如果更改为replaceState()
方法,不能够前进和回退
只需要向router-link
里添加replace
属性
home
show
设置选中属性
router-link被选中时会默认添加两个属性
- router-link-exact-active
- router-link-active
第一个是路由嵌套的属性,后面会继续深入
第二个是默认选中的属性,我们只需要在组件中设置该属性即可
同时,我们也可使用active-class
来修改默认属性
只需要在router-link
中添加这个属性并赋值即可,这个方法也并不常用
通过代码方式跳转
在组件中也可以不用router-link的方式来实现路由跳转
因为本质上就是history实现的路由跳转,所以可以在方法中实现,但是一定不要绕过vue-touter
HTML:
JS:
methods: {
toHome() {
this.$router.push('/home');
},
toShow() {
this.$router.push('/show');
}
}
如果想要实现路由跳转不可前进后退,那么只需使用replace属性即可