This repository was archived by the owner on May 24, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Routing
Pascal edited this page Sep 5, 2017
·
12 revisions
Official Documentation: https://router.vuejs.org/en/essentials/getting-started.html
https://github.com/oanstein/VueJS-Complete-Guide-Code/tree/master/16_routing/routes
import Vue from 'vue'
import VueRouter from 'vue-router' // 1.1 Import router
import App from './App.vue'
import { routes } from './routes' // 2.2 Import "const routes" from routes.js
Vue.use(VueRouter); // 1.2 Set up router, then create routes.js and export routes
const router = new VueRouter({ // 2.3 Implement routes
routes,
mode: 'history',
scrollBehavior (to, from, savedPosition) {
if (savedPosition) {
return savedPosition;
}
if (to.hash) {
return { selector: to.hash };
}
return {x: 0, y: 0};
}
});
router.beforeEach((to, from, next) => {
console.log('global beforeEach');
next();
});
new Vue({
el: '#app',
router,
render: h => h(App)
})import Home from './components/Home.vue';
import Header from './components/Header.vue';
const User = resolve => {
require.ensure(['./components/user/User.vue'], () => {
resolve(require('./components/user/User.vue'));
}, 'user');
}
const UserStart = resolve => {
require.ensure(['./components/user/UserStart.vue'], () => {
resolve(require('./components/user/UserStart.vue'));
}, 'user');
}
const UserEdit = resolve => {
require.ensure(['./components/user/UserEdit.vue'], () => {
resolve(require('./components/user/UserEdit.vue'));
}, 'user');
}
const UserDetail = resolve => {
require.ensure(['./components/user/UserDetail.vue'], () => {
resolve(require('./components/user/UserDetail.vue'));
}, 'user');
}
export const routes = [
// 2.1 Create route(s): Each needs a *path* (appended in URL); then set *component* (don't forget import)
{ path: '', name: 'home', components: {
default: Home,
'header-top': Header
} },
{ path: '/user', components: {
default: User,
'header-bottom': Header
}, children: [
{ path: '', component: UserStart },
{ path: ':id', component: UserDetail, beforeEnter: (to, from, next) => {
console.log('inside route setup');
next();
} },
{ path: ':id/edit', component: UserEdit, name: 'userEdit' },
] },
{ path: '/redirect-me', redirect: { name: 'home' } },
{ path: '*', redirect: '/'}
];<template>
<div class="container">
<div class="row">
<div class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3">
<h1>Routing</h1>
<hr>
<!-- 3.1 Mark place where route should be loaded (here named with "header-top") -->
<router-view name="header-top"></router-view>
<transition name="slide" mode="out-in">
<router-view></router-view>
</transition>
<router-view name="header-bottom"></router-view>
</div>
</div>
</div>
</template>
<script>
import Header from './components/Header.vue';
export default {
components: {
appHeader: Header
}
}
</script>
<style>
.slide-leave-active {
transition: opacity 1s ease;
opacity: 0;
animation: slide-out 1s ease-out forwards;
}
.slide-leave {
opacity: 1;
transform: translateX(0);
}
.slide-enter-active {
animation: slide-in 1s ease-out forwards;
}
@keyframes slide-out {
0% {
transform: translateY(0);
}
100% {
transform: translateY(-30px);
}
}
@keyframes slide-in {
0% {
transform: translateY(-30px);
}
100% {
transform: translateY(0);
}
}
</style><template>
<ul class="nav nav-pills">
<router-link to="/" tag="li" active-class="active" exact><a>Home</a></router-link>
<router-link to="/user" tag="li" active-class="active"><a>User</a></router-link>
</ul>
</template>Official Documentation: https://router.vuejs.org/en/essentials/navigation.html
<template>
<div>
<h1>The User Page</h1>
<hr>
<button @click="navigateToHome" class="btn btn-info">Go to Home</button>
<hr>
<router-view></router-view>
</div>
</template>
<script>
export default {
methods: {
navigateToHome() {
this.$router.push({ name: 'home' });
}
}
}
</script>https://github.com/vuejs/vue-router/blob/dev/examples/route-props/app.js
// Other Code
const router = new VueRouter({
mode: 'history',
base: __dirname,
routes: [
{ path: '/', component: Hello }, // No props, no nothing
{ path: '/hello/:name', component: Hello, props: true }, // Pass route.params to props
{ path: '/static', component: Hello, props: { name: 'world' }}, // static values
{ path: '/dynamic/:years', component: Hello, props: dynamicPropsFn } // custom logic for mapping between route and props
]
})
// Other Codehttps://github.com/vuejs/vue-router/blob/dev/examples/route-props/Hello.vue
<template>
<div>
<h2 class="hello">Hello {{name}}</h2>
</div>
</template>
<script>
export default {
// Prop :name from $route
props: {
name: {
type: String,
default: 'Vue!'
}
}
}
</script>- 00 Home
-
01 DOM Interactions
- 01 Events and Methods
- 02 HTML Binding
- 03 Computed Props
- 04_conditional_and_lists
- 05_filters
- 06 Components
- 07_disable_rerendering
- 08_raw_html
- 09_events
- 10_two_way_binding
- 11_computed_counts
- 12_shorthand
- 13 Dynamic CSS
- 14_using_style
- Exercise 1
- Exercise 2
- Exercise 3
- Exercise 4
-
02 Conditionals and Lists
- 01_v_if
- 02 v-for
- Exercise
- 03_monster_slayer
-
04_vue_instance
- 01_instance_vue
- 02_vue_lifecycle_in_practice
- 05_vue_cli
- 06_components
- 07_component_assignment
- 08 Communication between Components
-
09_advanced_components
- Assignment_8
- advanced_components
- 10_Wonderful_quoute_project
-
11 Forms
- form_assignments
- form_input
-
12_directives
- Assignment_directives
- custom_directives
-
13_filters_and_mixins
- assignment_filters_and_mixins
- filters_and_mixins
- 14 Animations and Transitions
-
15_http
- vue-resource
-
16 Routing
- routes
-
17 Vuex
- State Management
- vuex_master
-
18 Final Project
- the_stock_trader_app
- Assignment_7
- VueImages
- vue-mindspace