For single page applications , Officially provided vue-router Process route jump , This article is mainly based on its official documents .
install
Based on tradition , I prefer to use npm Installation in the form of package .
npm install vue-router --save
of course , The official has adopted various methods for installation , include bower,cdn etc .
Basic Usage
stay HTML Use in document , Just use v-link this directive Just do it , as :
Go to view-a
ps: v-link Also support activeClass Used to specify when the link is active css style .replace Attribute is true You can make the link jump without leaving a history .
And in ES5 Used in , You need to create a router instance first , Then pass in the configuration parameters , as :
var router = new VueRouter();
router.map({
'/view-a': {
component: ViewA
},
'/view-b': {
component: ViewB
}
});
router.start(App, '#app');
Router rules defined above , Map to a component , When you finally start the application , Mount to #app On the element of .
of course , If you want to use ES6 The syntax of , It's also easy to do :
First establish a router module , It is mainly used to configure and bind relevant information
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
const router = new VueRouter(); // The configuration parameters of the router can be included here
router.map({
'/view-a': {
component: ViewA
},
'/view-b': {
component: ViewB
}
});
export default router; // Export router
stay app.js Enable the router in the portal startup file
import Vue from 'vue';
import router from './routers';
router.start(App, '#app');
Nested Route
If you want to use nested routing , as /a/b You can update the routing configuration
router.map({
'/a': {
component: A,
subRoutes: {
'/b': {
component: B
}
}
}
});
meanwhile , You need to be in the component A And components B Used in , as :
assembly A in , Use nested outer chains
This is component A
The router will automatically render the corresponding components and update the routing information .
Which can be passed props, support v-ref, You can also use v-transition and transition-mode To get the scene switching effect , The rendered component will be registered with the parent component this.$ On object .
Route object and route matching
Routing object , Namely $router Will be injected into each component , It can be used to obtain some information . as
attribute
explain
$route.path
The path of the current routing object , as '/view/a'
$rotue.params
About dynamic clips ( as /user/:username) Key value pair information , as {username: 'paolino'}
$route.query
Request parameters , as /foo?user=1 Get query.user = 1
$route.router
Router and component information
$route.matched
array , Contains the configuration parameter object corresponding to all fragments contained in the current matching path .
$route.name
Current path name
of course , You can also define your own routing rules (map) Custom fields when , For special purposes .
The syntax for full match fragments is to use wildcards * as ,/user/*any Will match any /user Path starting with , And give params Object any
The syntax of dynamic fragments is to use : As a sign .
Use path name
When defining path rules , If you provide it with a name attribute , You can use this path rule later , Direct reference .
router.map({
'/user/:userId': {
name: 'user',
component: {...}
}
});
stay v-link Used in
This is a user whose id is 1
You can also use router.go()
router.go({name: 'user', params: {userId: 1}});
Will eventually match /user/1 On this path
Routing options
Routing option name
Default value
effect
hashbang
true
Format path as #! start
history
false
Enable HTML5 history pattern , have access to pushState and replaceState To manage records
abstract
false
Use a browser independent browsing history virtual management backend .
transitionOnLoad
false
Whether to enable scene switching during initial loading
saveScrollPosition
false
On enable html5 history Mode takes effect when , Remember the previous scroll bar position when you use it for backward operation
linkActiveClass
"v-link-active"
When a link is clicked, it needs to be added to v-link On element class class , Default to active
as , I want to use a path formatted and enabled Html5 history Functional router , When the router is initialized , Specify these parameters :
var router = new VueRouter({
hashbang: true,
history: true
});
Here is just a brief introduction , See here for more options .
last , For more advanced usage, please refer to the official documentation .
Reference documents
Technology