网页跳转的两种方式
使用a标签(<router-link>
)方式跳转
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="js/vue-2.4.0.js"></script>
<script src="js/vue-router.js"></script>
</head>
<body>
<div id="app">
<router-link to="/login">登录</router-link>
<router-link to="/register">注册</router-link>
<router-view></router-view>
</div>
<script>
var login = {
template:'<h1>登录</h1>'
}
var register = {
template:'<h1>注册</h1>'
}
var router = new VueRouter({
routes:[
{path:'/',redirect:'/login'},
{path:'/login',component:login},
{path:'/register',component:register}
]
})
var vm = new Vue({
el:'#app',
methods:{
},
router
})
</script>
</body>
</html>
使用window.location.href方式
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="js/vue-2.4.0.js"></script>
<script src="js/vue-router.js"></script>
</head>
<body>
<div id="app">
<!--<router-link to="/login">登录</router-link>
<router-link to="/register">注册</router-link>-->
<div @click="goInfo"> 去注册组件 </div>
<router-view></router-view>
</div>
<script>
var login = {
template:'<h1>登录</h1>'
}
var register = {
template:'<h1>注册</h1>'
}
var router = new VueRouter({
routes:[
{path:'/',redirect:'/login'},
{path:'/login',component:login},
{path:'/register',component:register}
]
})
var vm = new Vue({
el:'#app',
methods:{
goInfo(){
this.$router.push('/register')
}
},
router
})
</script>
</body>
</html>
- 一定要区分this.
r
o
u
t
e
和
t
h
i
s
.
route和this.
route和this.router这两个对象
- this.$route是所有路由的参数对象,params和query都属于它
- this.$router是路由的导航对象,用它可以方便的使用JS代码,实现路由的前进后退跳转到新的URL地址
↓↓上面网站扒下来的看着方便
程序化导航
除了<router-link>
用于为声明性导航创建锚标签之外,我们还可以使用路由器的实例方法以编程方式执行此操作。
#router.push(location, onComplete?, onAbort?)
注意:在Vue实例内部,您可以访问路由器实例 r o u t e r 。你可以这样打电话 t h i s . router。你可以这样打电话this. router。你可以这样打电话this.router.push。
要导航到其他URL,请使用router.push
。此方法将新条目推送到历史堆栈中,因此当用户单击浏览器后退按钮时,它们将被带到先前的URL。
当您单击a时<router-link>
,这是内部调用的方法,因此单击<router-link :to="...">
相当于调用router.push(...)
。
陈述 | 编程 |
---|---|
<router-link :to="..."> | router.push(...) |
参数可以是字符串路径或位置描述符对象。例子:
// literal string path
router.push('home')
// object
router.push({ path: 'home' })
// named route
router.push({ name: 'user', params: { userId: '123' } })
// with query, resulting in /register?plan=private
router.push({ path: 'register', query: { plan: 'private' } })
注意:params
如果path
提供了a,则会被忽略,但不是这种情况query
,如上例所示。相反,您需要提供name
路由或path
使用任何参数手动指定整个:
const userId = '123'
router.push({ name: 'user', params: { userId } }) // -> /user/123
router.push({ path: `/user/${userId}` }) // -> /user/123
// This will NOT work
router.push({ path: '/user', params: { userId } }) // -> /user
相同的规则适用于组件的to
属性router-link
。
在2.2.0+,可选地提供onComplete
与onAbort
回调router.push
或router.replace
作为第二和第三参数。导航成功完成(在解析所有异步挂钩之后)或中止(导航到同一路线,或在当前导航完成之前到不同路线)时,将调用这些回调。
**注意:**如果目标与当前路由相同且只有params正在更改(例如,从一个配置文件转到另一个配置文件/users/1
- > /users/2
),则必须使用beforeRouteUpdate
以对更改做出反应(例如,获取用户信息)。
#router.replace(location, onComplete?, onAbort?)
它的作用就像router.push
,唯一的区别是它导航时没有按下新的历史记录条目,顾名思义 - 它取代了当前的条目。
陈述 | 编程 |
---|---|
<router-link :to="..." replace> | router.replace(...) |
#router.go(n)
此方法采用单个整数作为参数,指示在历史堆栈中前进或后退的步数,类似于window.history.go(n)
。
例子
// go forward by one record, the same as history.forward()
router.go(1)
// go back by one record, the same as history.back()
router.go(-1)
// go forward by 3 records
router.go(3)
// fails silently if there aren't that many records.
router.go(-100)
router.go(100)
#历史操纵
您可能已经注意到router.push
,router.replace
并且router.go
是同行window.history.pushState
,window.history.replaceState
而且window.history.go
,和他们做模仿window.history
的API。
因此,如果您已熟悉浏览器历史记录API,则使用Vue Router可以非常轻松地操作历史记录。
值得一提的是,Vue的路由器导航方法(push
,replace
,go
)的所有路由器模式一致地工作(history
,hash
和abstract
)。
其他
提供前端学习资料,(如mini vue)
学校期末设计服务
简历修改、问题解答
多年大厂经验
可私聊咨询