npm install -g @vue/cli
//检查版本
vue --version
复制代码
vue create xxxx
//可视化界面
vue ui
复制代码
import Vue from 'vue'
import Router from 'vue-router'
import Home from './views/Home.vue'//引入组件
Vue.use(Router)
export default new Router({
mode: 'history',// history hash
base: process.env.BASE_URL,
routes: [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/about',
name: 'about',
component: About
}
]
复制代码
render: h => h(App)
等价于render:function(h){return h(App);}
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
Vue.config.productionTip = false
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
复制代码
this.$router
访问路由器,也能够经过 this.$route
访问当前路由// Home.vue
export default {
computed: {
username () {
return this.$route.params.username
}
},
methods: {
goBack () {
window.history.length > 1 ? this.$router.go(-1):this.$router.push('/')
}
}
}
复制代码
//name 进入的组件名称
//params 传递的参数
<router-link :to="{name: 'home', params: {id: '123', name: 'aaa', age: 2}}">首页传参</router-link>
复制代码
<p>{{$route.params.id}}</p>
<p>{{$route.params.name}}</p>
<p>{{$route.params.age}}</p>
复制代码
<router-link to="/details/333/aaa">详情页</router-link>
复制代码
<p>{{$route.params.userId}}</p>
<p>{{$route.params.name}}</p>
复制代码
{
path: '/details/:userId/:name',
component: Details
},
复制代码
<router-link>
<a>
标签<!-- 字符串 -->
<router-link to="home">Home</router-link>
<!-- 渲染结果 -->
<a href="home">Home</a>
<!-- 使用 v-bind 的 JS 表达式 -->
<router-link v-bind:to="'home'">Home</router-link>
<!-- 不写 v-bind 也能够,就像绑定别的属性同样 -->
<router-link :to="'home'">Home</router-link>
<!-- 同上 -->
<router-link :to="{ path: 'home' }">Home</router-link>
<!-- 命名的路由 -->
<router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
<!-- 带查询参数,下面的结果为 /register?plan=private -->
<router-link :to="{ path: 'register', query: { plan: 'private' }}">Register</router-link>
复制代码
<router-view>
<template>
<div class="navbar">
<ul id="main">
<li><router-link to="/home" >home</router-link></li>
</ul>
<!-- 路由匹配到的组件将显示在这里 -->
<router-view></router-view>
</div>
</template>
复制代码
<router-view>
设置了名称,则会渲染对应的路由配置中 components 下的相应组件<router-view class="view one"></router-view>
<!--Foo-->
<router-view class="view two" name="a"></router-view>
<!--Bar-->
<router-view class="view three" name="b"></router-view>
<!--Baz-->
<script> const router = new VueRouter({ routes: [ { path: '/', components: { default: Foo, a: Bar, b: Baz } } ] }) </script>
复制代码
redirect
const router = new VueRouter({
routes: [
{ path: '/a', redirect: '/b' }
]
})
复制代码
const router = new VueRouter({
routes: [
{ path: '/a', redirect: { name: 'foo' }}
]
})
复制代码
const router = new VueRouter({
routes: [
{ path: '/a', redirect: to => {
// 方法接收 目标路由 做为参数
// return 重定向的 字符串路径/路径对象
}}
]
})
复制代码
alias
const router = new VueRouter({
routes: [
{ path: '/a', component: A, alias: '/b' }
]
})
复制代码
router.beforeEach
const router = new VueRouter({ ... })
router.beforeEach((to, from, next) => {
// code
})
复制代码
resolve
完以前一直处于等待中。to: Route
即将要进入的目标 路由对象from: Route
当前导航正要离开的路由next: Function
必定要调用该方法来 resolve
这个钩子。执行效果依赖 next
方法的调用参数。next()
进行管道中的下一个钩子。若是所有钩子执行完了,则导航的状态就是 confirmed
(确认的)。next(false
)中断当前的导航。若是浏览器的 URL 改变了 (多是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from
路由对应的地址。 -next('/')
或者 next({ path: '/' })
跳转到一个不一样的地址。当前的导航被中断,而后进行一个新的导航。你能够向 next
传递任意位置对象,且容许设置诸如 replace: true、name: 'home'
之类的选项以及任何用在 router-link
的 to prop
或router.push
中的选项。next(error)
若是传入 next
的参数是一个 Error
实例,则导航会被终止且该错误会被传递给 router.onError()
注册过的回调。next
方法,不然钩子就不会被 resolved
。router.beforeResolve
和 router.beforeEach
相似html
区别vue
在导航被确认以前,同时在全部组件内守卫和异步路由组件被解析以后,解析守卫就被调用。vue-router
router.afterEach((to, from) => {
// code
})
复制代码
router.beforeEnter
const router = new VueRouter({
routes: [
{
path: '/foo',
component: Foo,
beforeEnter: (to, from, next) => {
// ...
}
}
]
})
复制代码
const Foo = {
template: `...`,
beforeRouteEnter (to, from, next) {
// 在渲染该组件的对应路由被 confirm 前调用
// 不!能!获取组件实例 `this`
// 由于当守卫执行前,组件实例还没被建立
},
beforeRouteUpdate (to, from, next) {
// 在当前路由改变,可是该组件被复用时调用
// 举例来讲,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
// 因为会渲染一样的 Foo 组件,所以组件实例会被复用。而这个钩子就会在这个状况下被调用。
// 能够访问组件实例 `this`
},
beforeRouteLeave (to, from, next) {
// 导航离开该组件的对应路由时调用
// 能够访问组件实例 `this`
}
}
复制代码
fade-enter
进入过渡的开始状态fade-enter-active
进入过渡的结束状态fade-enter-to
进入结束状态fade-leave
离开过渡的开始状态fade-leave-active
离开过渡的结束状态fade-leave-to
离开结束状态