zoukankan      html  css  js  c++  java
  • vue-router切换时loading效果实现

    实现原理

    1. 可以在vuex中维护一个isLoading 的变量

    2. 在 router.beforeEach 钩子中 设置 isLoading = true , 在 router.afterEach 中 设置 isLoading = false

    Vuex:

    actions.js:

    export default {
      onLoading(context, isLoading) {
        context.commit('setLoading', isLoading);
      }
    };

    mutations.js:

    export default {
      setUser(state, user) {
        state.user = user;
      },
      setUserPlaylist(state, playlist) {
        state.userPlaylist = playlist;
      },
      setCount(state, count) {
        state.count = count;
      },
      setLoading(state, isLoading) {
        console.log(isLoading);
        state.isLoading = isLoading;
      }
    };

    state.js:

    export default {
      user: null,
      userPlaylist: [],
      count: 0,
      isLoading: null
    };

    在main.js中:

    router.beforeEach((to, from, next) => {
      store.dispatch('onLoading', true);
      console.log(store.state.isLoading);
      next();
    });
    // 这里为了让效果明显一些加了延时
    router.afterEach((to, from) => {
      setTimeout(function() {
        store.dispatch('onLoading', false);
        console.log(store.state.isLoading);
      }, 1000);
    });

    3. 在根组件(即所在的父组件)上 放置一个Loading组件,例如:

    computed: {
        ...mapState(['count', 'isLoading']),
        keyword() {
          return this.$route.params.keywords;
        }
      },

    完成

  • 相关阅读:
    vue组件上绑定原生事件
    vue中sync的使用原来这么简单
    vscode快捷键
    justify-content: space-between能够对齐的解决办法
    day_01:__all__、__init__、推导式
    单元测试框架pytest
    ELK从入门到实战
    HTB::Return
    Codeforces Round #752 (Div. 2) ABCD
    动态神经网络综述阅读笔记
  • 原文地址:https://www.cnblogs.com/hahahakc/p/13203785.html
Copyright © 2011-2022 走看看