vuex实现路由切换动画同时嵌套路由同样使用

示例 http://47.94.90.89/dist/#/aaa
一、安装vue-cli
1 下载安装node.js
2 npm install -g cnpm --registry=https://registry.npm.taobao.org 换源
3 cnpm install -g vue-cli 全局安装vue-cli 已安装则不用
4 vue init webpack Vue-Project 初始化vue项目 使用webpack模板,项目名称(自带webpack)
5 cnpm install 初始化 生成node_modules
6 npm run dev 打包则 npm run build
二、安装vuex
1 cnpm install vuex --save-dev
2 然后在 main.js 中引入

   import Vue from ‘vue‘
import App from ‘./App‘
import Vuex from ‘vuex‘
import store from ‘./vuex/store‘

Vue.use(Vuex)
3 src 目录下创建一个 vuex 目录,将 store.js 放到 vuex 目录下

   import Vue from ‘vue‘
import Vuex from ‘vuex‘
Vue.use(Vuex)
const store = new Vuex.Store({
  // 定义状态
  state: {
    animateName:‘slide-left‘
  },
  mutations:{
    newAnimateName(state,val){
      state.animateName=val
    }
  }
})
export default store

三、 配置

1 、 router目录> index.js
   import  ac2 from ‘@/components/aaachild2‘

Router.prototype.go = function (a) {
  sessionStorage.isBack = true
  if(a){
    window.history.go(a)
  }else{
    window.history.go(-1)
  }
}
window.addEventListener("popstate", function(e) { //×××返回键
  sessionStorage.isBack = true
}, false);

Vue.use(Router)

2、 app.vue 中

   <template>
  <div id="app">
    <!--<img src="./assets/logo.png">-->

     <transition :name="transitionName" >
        <router-view class="child-view" ></router-view>
      </transition>
  </div>
</template>

<script>
export default {
  name: ‘App‘,
  data () {
    return {

    }
  },
  computed: {
    transitionName () { //实时获取vuex 改变的类名
      return this.$store.state.animateName
    }
  },
  watch: {
    ‘$route‘ (to, from) {
     // 如果isBack为true时,证明是用户点击了回退,执行slide-right动画
      let isBack = eval(sessionStorage.isBack)
      if (isBack) {
        this.$store.commit(‘newAnimateName‘, ‘slide-right‘)
      } else {
        this.$store.commit(‘newAnimateName‘, ‘ slide-left‘)
      }
      // 做完回退动画后,要设置成前进动画,否则下次打开页面动画将还是回退
      sessionStorage.isBack = false
    }
  },

}
</script>

<style>
  *{
    margin: 0 ;
    padding: 0;
  }
  body,html{
    width: 100%;
    height: 100%;
  }
#app {
  font-family: ‘Avenir‘, Helvetica, Arial, sans-serif;
  width: 100%;
  height: 100%;
  text-align: center;
  max-width: 750px;
  margin: 0 auto;
  overflow-x: hidden;
  position: relative;
}
  .child-view {
    transition:all .3s ease;
    -webkit-transition:all .3s ease;
    position: absolute;
    width: 100%;

  }
  .slide-left-enter,.slide-right-leave-active {
    opacity:0;

    -webkit-transform:translate(100%,0);

    transform:translate(100%,0);

  }

  .slide-left-leave-active,.slide-right-enter {

    opacity:0;

    -webkit-transform:translate(-100%,0);

    transform:translate(-100%,0);
  }
/*  .slide-left-enter-active {
     transition-delay: 0.1s;
   }*/

</style>

子组件嵌套使用 时,入a.vue 中嵌套
<transition :name="transitionName" >
<router-view class="child-view" ></router-view>
同时a中使用计算属性
computed: {
transitionName () {
return this.$store.state.animateName
}
},

    可以在vuex中使用多个 类名及动画 给不同的组件使用(猜的)

原文地址:http://blog.51cto.com/521kun/2118020

时间: 2024-07-31 13:20:37

vuex实现路由切换动画同时嵌套路由同样使用的相关文章

十八、React react-router4.x中:实现路由模块化、以及嵌套路由父子组件传值

一.路由模块化(用字典定义路由,然后循环出来) 1.官方文档参考 [官方文档]https://reacttraining.com/react-router/web/guides/quick-start [路由模块化实例]https://reacttraining.com/react-router/web/example/route-config 2.路由模块化:实现代码 其它代码参考:十七:https://blog.csdn.net/u010132177/article/details/1033

基于vux的Vue路由切换动画

const history = window.sessionStorage history.clear() let historyCount = history.getItem('count') * 1 || 0 history.setItem('/index', 0) router.beforeEach((to, from, next) => { const toIndex = history.getItem(to.path) const fromIndex = history.getItem

从Angular2路由引发的前后端路由浅谈

笔者的学习进度比较慢,直到两年以前写的网站都还是以服务端为主导的,即网站的所有视图都由服务器视图模板来渲染,笔者使用的是 DotNet MVC,开发套路就是在Controller里面写Action,在Views里写对应的Action.cshtml,使用ajax发起请求已经是比较前端的事情了.这种时候由于DotNet MVC框架继承的微软风格的懒人模式,甚至不需要去知道其路由是如何实现的,给人一种感觉是只要在浏览器里敲进去Controller名与Action名,就访问到视图了. 后来笔者开始使用n

vue父路由默认选中第一个子路由,切换子路由让父路由高亮不会消失

在实际开发中,嵌套路由经常会用到,基本用法也很简单,今天遇到了当前路由下(父路由)在点击它的子路由时,他的(父路由)选中状态消失了 原因是: 1.子路由router-link加了exac精确匹配路由 2.在写路由的时候,父子路由没有严格按照一级/二级来写 嵌套路由中默认选中第一个子路由 { path: '/dec', // 设备中心,主路由 redirect: '/dec/decOverview', name: 'decIndex', component: DecIndex, meta: { t

vue路由切换终止请求

问题: 在SPA模式开发当中,比如VUE ,当前路由切换的时候如何终止正在发生的异步请求呢, 结果: 假如请求超时并且有设定超时时间.有一堆的异步请求在执行,当用户切换到另一个页面,这些请求还未终止,并且当服务器响应之后,反馈的结果不是当前页面所期待的.最终会误导用户造成一些不必要的结果.也给web 造成性能问题. 解决方案: 把执行的请求存入队列,当路由切换的时候终止队列里的异步请求. 首先搞一棵树来存储请求队列 import Vue from 'vue' import Vuex from '

VUE温习:nextTick、$refs、嵌套路由、keep-alive缓存、is特性、路由属性用法、路由钩子函数

一.$nextTick 1.vue的dom执行异步更新,只要观察到数据变化,vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变. 2.vue.$nextTick(cb),数据发生变化,更新dom后执行回调 二.$refs用法 1.ref作用于普通元素——得到dom节点 2.ref作用于子组件——得到组件实例,可使用组件所有方法 3.当v-for用于元素或组件的时候,refs将是包含dom节点或组件实例的数组(想得到单个的ref,只需循环即可) 三.vue组件hover事件模拟 1.m

3、嵌套路由

同理 在看 嵌套路由的时候 来分析一下 ionic2 默认生成的 tabs 项目.目录结构: child 目录是我新加的 因为这里是要做用来做嵌套路由的. 首先先看app.js /* --- app.js ----*/ import {App, Platform} from 'ionic-angular'; import {StatusBar} from 'ionic-native'; import { TabsPage } from './pages/tabs/tabs'; @App({ te

Ember.js 入门指南——路由切换的防止和重试

在路由的切换过程中,Ember路由器会通过回调(beforeModel.model.afterModel.redirect)解析一个transition对象到切换的下一路由中.任何一个回调都可以通过传递过来的transition参数获取transition对象,然后使用这个对象调用transition.abort()方法立即终止路由的切换,如果你的程序保存了这个对象(transition对象)之后你还可以在需要的地方取出来并调用transition.retry()方法激活路由切换这个动作,最终实

AngularJS ui-router (嵌套路由)

介绍 AngularJS 嵌套路由:这是我针对同一个主题(ui-router)的第二篇文章. 如果你对第一篇文章感兴趣的话,可以访问 这里. 好了,让我们继续吧,来看看嵌套的ui-router状态是怎么回事. ui-router和同属AngularJS框架一部分的ng-route一样强大. ui-router提供了让我们可以做路由嵌套和视图命名的特性. 我们将在示例中看到ui-router中存在的所有类型. 背景 引述我之前那篇文章开头给出的使用ui-router框架实现的简单路由, 基于我们的