vue-element-admin 根据条件刷新

博客介绍了在Vue中实现页面刷新的整体思路,先通过路由守卫判断传入参数并给refreshFlag赋值,再在activated生命周期中判断是否刷新页面。还介绍了路由守卫的方法及能否使用‘this’,以及created、mounted、activated等Vue生命周期钩子的特点和执行顺序。

整体思路

在进入页面前先由路由守卫对传入参数进行判断,然后给此页面的data中参数refreshFlag赋值;在进入vue生命周期activated中进行判断refreshFlag,是否需要刷新页面,如果需要刷新则调用刷新方法。

使用路由守卫

以下是路由守卫的三个方法,及在各个方法是否能够使用 ‘this’

beforeRouteEnter (to, from, next) {
    // 在渲染该组件的对应路由被 confirm 前调用
    // 不能获取组件实例 `this`
    // 因为当钩子执行前,组件实例还没被创建
},

beforeRouteUpdate (to, from, next) {
    // 在当前路由改变,但是该组件被复用时调用
    // 举例来说,对于一个带有动态参数的路径 /foo/:id,在 /foo/1 和 /foo/2 之间跳转的时候,
    // 由于会渲染同样的 Foo 组件,因此组件实例会被复用。而这个钩子就会在这个情况下被调用。
    // 可以访问组件实例 `this`
},

beforeRouteLeave (to, from, next) {
    // 导航离开该组件的对应路由时调用
    // 可以访问组件实例 `this`
}

VUE生命周期的使用

created:在创建vue对象时,当html渲染之前就触发;但是注意,只会触发一次、
mounted:是挂载vue实例后的钩子函数,钩子在主页挂载时执行一次,如果没有缓存的话,再次回到主页时,此函数还会执行。
activated:是组件被激活后的钩子函数,每次回到页面都会执行。
执行顺序:created => mounted =>activated

vue生命周期钩子 (mounted 加载数据没有缓存用,使用缓存后mounted和created都只执行一次,再次进入页面后不能够执行在其里面的方法,所以使用activated 配合keep-alive组件)。

废话不说直接上代码

具体代码如下:

data() {
    return {
        ......
        refreshFlag: false
    }
},
beforeRouteEnter(to, from, next) {
    const xxx = to.params.xxx
    // 判断条件对refreshFlag进行赋值
    if (xxx === undefined) {
      next(vm => {
        // 因为当钩子执行前,组件实例还没被创建
        // vm 就是当前组件的实例相当于上面的 this,所以在 next 方法里你就可以把 vm 当 this 来用了。
        vm.refreshFlag = false
      })
    } else {
      next(vm => {
        vm.refreshFlag = true
      })
    }
},
activated() {
    console.log('activated......')
    if (this.refreshFlag) {
        doRefresh()
    }
},
......
Vue-element-admin 是一个基于 Vue.jsElement UI 的后台管理系统模板。在 Vue-element-admin 中,页面刷新可以通过以下几种方式实现: 1. 使用 Vue Router 的 `beforeEach` 钩子函数:在路由切换之前,可以执行一些操作,比如刷新页面。可以在 `router/index.js` 文件中设置如下代码: ```javascript import router from './router' router.beforeEach((to, from, next) => { // 判断是否需要刷新页面 if (to.meta.refresh) { window.location.reload() } else { next() } }) ``` 然后在路由配置文件 `router/modules` 中,对需要刷新页面进行标记: ```javascript const routes = [ { path: '/dashboard', component: Layout, children: [ { path: 'index', name: 'Dashboard', component: () => import('@/views/dashboard/index'), meta: { title: 'Dashboard', icon: 'dashboard', refresh: true } // 设置 refresh 属性为 true } ] } ] ``` 2. 使用 `window.location.reload()` 方法:在需要刷新页面的地方,可以直接调用该方法进行页面刷新。例如,在某个按钮点击事件中: ```javascript methods: { handleRefresh() { window.location.reload() } } ``` 3. 使用 Vuex 进行状态管理:可以在 Vuex 的状态管理中定义一个变量,用来标记是否需要刷新页面。然后在对应的页面组件中监听该变量的变化,当变量为 `true` 时,执行刷新操作。 这些方法都可以实现页面刷新效果,根据具体的需求选择合适的方式即可。希望对你有帮助!如果有更多问题,请继续提问。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值