2016-12-19 13 views

ответ

77

Wrap <router-view></router-view> с <transition name="fade"></transition> и добавить эти стили:

.fade-enter-active, .fade-leave-active { 
    transition-property: opacity; 
    transition-duration: .25s; 
} 

.fade-enter-active { 
    transition-delay: .25s; 
} 

.fade-enter, .fade-leave-active { 
    opacity: 0 
} 

Подробный ответ

Предполагая, что вы создали приложение с вю-кли, например:

vue init webpack fadetransition 
cd fadetransition 
npm install 

Установить маршрутизатор:

npm i vue-router 

Если вы не разрабатываете приложение с помощью VUE-консоль, убедитесь, что добавить VUE маршрутизатору стандартного способа:

<script src="/path/to/vue.js"></script> 
<script src="/path/to/vue-router.js"></script> 

Вы можете использовать, например: https://unpkg.com/vue-router/dist/vue-router.js

CLI создал для вас, к которым вы можете добавить компоненты.

1) Создать страницу компоненты

В Vue, компоненты (элементы пользовательского интерфейса) могут быть вложенными. Страница в вашем приложении может быть сделана с помощью обычного компонента Vue, который считается корнем для других компонентов на этой странице.

К src/ и создать pages/. Эти корневые компоненты (отдельные страницы) будут помещены в этот каталог, а другие компоненты, используемые на фактических страницах, можно поместить в готовый каталог components/.

Создайте две страницы в файлах, которые называются src/pages/Page1.vue и src/pages/Page2.vue для начала. Их содержание будет (номера страниц редактирования соответственно):

<template> 
    <h1>Page 1</h1> 
</template> 

<script> 
export default { 
} 
</script> 

<style scoped> 
</style> 

2) Настройка маршрутизации

Редактировать сгенерированные src/main.js добавить необходимый импорт:

import VueRouter from 'vue-router' 
import Page1 from './pages/Page1' 
import Page2 from './pages/Page2' 

Добавить глобальное использование маршрутизатора:

Vue.use(VueRouter) 

Добавить настройки маршрутизатора:

const router = new VueRouter({ 
    routes: [ 
    { path: '/page1', component: Page1 }, 
    { path: '/page2', component: Page2 }, 
    { path: '/', redirect: '/page1' } 
    ] 
}) 

Последний маршрут просто перенаправляет начальный путь к //page1. Редактирование инициации приложения:

new Vue({ 
    router, 
    el: '#app', 
    render: h => h(App) 
}) 

Весь src/main.js пример в конце ответа.

3) добавить представление маршрутизатор

маршрутизации устанавливается сейчас, просто место, где компоненты страницы будут оказаны в соответствии с маршрутизатором отсутствует. Это делается путем размещения <router-view></router-view> где-то в шаблонах, вам нужно поместить его в тег src/App.vue<template>.

Весь src/App.vue пример находится в конце ответа.

4) Добавить выцветанию эффект перехода между компонентами страницы

Оберните <router-view></router-view> с <transition name="fade"> элемента, например:

<template> 
    <div id="app"> 
    <transition name="fade"> 
     <router-view></router-view> 
    </transition> 
    </div> 
</template> 

Vue будет делать эту работу здесь: она будет создавать и вставлять соответствующий CSS классы, начинающиеся с имени, указанного через длительность эффекта, например: .fade-enter-active. Теперь определите эффекты в разделе App.vue:

<style> 
.fade-enter-active, .fade-leave-active { 
    transition-property: opacity; 
    transition-duration: .25s; 
} 

.fade-enter-active { 
    transition-delay: .25s; 
} 

.fade-enter, .fade-leave-active { 
    opacity: 0 
} 
</style> 

Вот и все. Если вы запустите приложение сейчас, например, с npm run dev, он автоматически отображает страницу с эффектом затухания. Если вы переписываете URL-адрес на страницу/page2, он будет переключать страницы с эффектами постепенного исчезновения и затухания.

Для получения дополнительной информации ознакомьтесь с документацией по routing и transitions.

5) Дополнительно: Добавить ссылки на страницы.

Вы можете добавить ссылки на конкретные страницы с <router-link> компонента, например:

<router-link to="/page1">Page 1</router-link> 
<router-link to="/page2">Page 2</router-link> 

Это автоматически дает ссылки на router-link-active класс в случае, если они активны, но вы также можете задать пользовательские классы, если вы используя, например, Bootstrap:

<router-link class="nav-link" active-class="active" to="/page1">Page 1</router-link> 
<router-link class="nav-link" active-class="active" to="/page2">Page 2</router-link> 

Файлы для справки

SRC/main.js:

// The Vue build version to load with the `import` command 
// (runtime-only or standalone) has been set in webpack.base.conf with an alias. 
import Vue from 'vue' 
import VueRouter from 'vue-router' 

import App from './App' 
import Page1 from './pages/Page1' 
import Page2 from './pages/Page2' 

Vue.use(VueRouter) 

const router = new VueRouter({ 
    routes: [ 
    { path: '/page1', component: Page1 }, 
    { path: '/page2', component: Page2 }, 
    { path: '/', redirect: '/page1' } 
    ] 
}) 

/* eslint-disable no-new */ 
new Vue({ 
    router, 
    el: '#app', 
    render: h => h(App) 
}) 

SRC/App.vue:

<template> 
    <div id="app"> 
    <router-link class="nav-link" active-class="active" to="/page1">Page 1</router-link> 
    <router-link class="nav-link" active-class="active" to="/page2">Page 2</router-link> 
    <transition name="fade"> 
     <router-view></router-view> 
    </transition> 
    </div> 
</template> 

<script> 
export default { 
    name: 'app' 
} 
</script> 

<style> 
.fade-enter-active, .fade-leave-active { 
    transition-property: opacity; 
    transition-duration: .25s; 
} 

.fade-enter-active { 
    transition-delay: .25s; 
} 

.fade-enter, .fade-leave-active { 
    opacity: 0 
} 
</style> 

SRC/страницы/стр.1. vue:

<template> 
    <h1>Page 1</h1> 
</template> 

<script> 
export default { 
} 
</script> 

<style scoped> 
</style> 

SRC/страницы/Page2.vue:

<template> 
    <h1>Page 2</h1> 
</template> 

<script> 
export default { 
} 
</script> 

<style scoped> 
</style> 
+1

Черт, что было тщательно, спасибо за классы замирания! –

+2

У меня было бы + 1'd два раза, если бы это позволило мне. Благодаря! –

+0

Есть ли способ указать, какой переход использовать для каждой страницы? Например, я пытаюсь переместить страницу вверх/вниз на основе той страницы, на которой пользователь перемещается в/из. –