Vue + Vue-router 同名路由切换数据不更新的方法,transition 起作用

vue2 如何让同名路由切换时, transition 起作用?

由于路由组件的复用问题, 相同路由切换, 是不会出现动画效果的, 比如从 /article/1 切换到 /article/2

vue1 可以用路由钩子canReuse来取消组件的复用, 然后 vue2 已经取消了这个钩子, 那么 vue2 就没办法做到了吗?

其实 vue2 要做到其实也很简单

<transition name="move" mode="out-in">
    <router-view :key="key"></router-view>
</transition>

//我们先通过计算属性, 生成一个 key, 这个 key 必须保证每一个 url 都不一样, 所以我们直接通过$route.path来生成, 有了这个唯一的 key 之后, 我们给router-view绑上即可.

computed: {
    key() {
        let key = '';
        if(this.$route.query.router) {
            key = '_' + this.$route.query.router
        } else {
            key = this.$route.path.replace(/\//g, '_')
        }
        return key;
    }
},

Vue + Vue-router 同名路由切换数据不更新的方法

在默认情况下, 同名路由之间的切换, 由于组件可以服用, 放在ready里获取数据, 是不会执行的, 有两种方法可以解决

//注意: 该问题仅存在于 vue1

//方法1: 将数据获取放到route.data下
route: {
  data({to: {params: { page }}}) {
    return Promise.all([
      this.getApi()
    ]).then(() => {
 
    })
  }
}



//方法2: 设置route.canReuse = false, 强制组件不复用~
route: {
  canReuse() {
    return false
  }
},
ready() {
  var request = $.ajax({
    type: "POST",
    dataType: 'json',
    url: "api.php"
  });
  request.then((json) => {
    // balabala
  });
}

vue2数据初始化,重置数据

Object.assign(this.$data, this.$options.data()) 实现实例的数据重置

beforeRouteUpdate(to, from, next){
    console.log('进来加载2')                          
    Object.assign(this.$data, this.$options.data())   
    next()
},
created(){     
    console.log('进来加载1')  
},

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue RouterVue.js 官方的路由管理器,它和 Vue.js 的核心深度集成,让构建单页应用变得易如反掌。Vue Router 通过管理应用的URL,实现了组件的切换,让用户可以在单页应用中享受到和传统多页应用相同的体验。 在 Vue Router 中,我们可以通过 <router-view> 组件来渲染匹配到的组件。它是 Vue Router 中最重要的组件之一。当我们的路由切换时,<router-view> 组件可以根据当前的 URL 自动切换到匹配到的组件,不需要手动处理。 下面是一些关于 <router-view> 组件使用的详解: 1. <router-view> 组件是函数式组件,它不会渲染出任何实际的 HTML 元素,而是渲染出匹配到的组件。 2. 每次路由切换时,<router-view> 组件会销毁旧的组件并创建新的组件实例。 3. 如果在路由配置中没有指定组件的 name 属性,则默认使用默认组件。 4. 如果有多个 <router-view> 组件,需要在路由配置中指定每个 <router-view> 组件应该渲染哪个组件。 5. 如果没有匹配到任何路由,则 <router-view> 组件不会渲染出任何内容。 6. 可以使用 <keep-alive> 包裹 <router-view> 组件,让路由切换时保持组件状态不被销毁。 7. 可以使用 <transition> 包裹 <router-view> 组件,为路由切换添加过渡动画效果。 总的来说,<router-view> 组件是 Vue Router 中最常用的组件之一。它可以让我们在构建单页应用时轻松地管理路由和组件,为用户提供更好的体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值