Ant Design of Vue 零熟练度学习记录

我已经花了十分钟完全了解了这个框架

本文不定时更新,用以记录该框架的学习历程,希望您能在阅读本文的过程中能有所收获。

1.工程目录

1.src文件保存源文件

2.package.json是npm的配置文件用来保存项目信息(类似maven工程的pom)

Ant Design of Vue 零熟练度学习记录_第1张图片

2.src目录

Ant Design of Vue 零熟练度学习记录_第2张图片

2.1.api

将axios请求封装成function方便调用

2.2.assets

Ant Design of Vue 零熟练度学习记录_第3张图片

项目的图片等资源文件目录

2.3.components

Ant Design of Vue 零熟练度学习记录_第4张图片

antd vue组件(可以说是框架核心)

2.4.config

用于保存配置文件 如router配置

2.5& 2.6.core layouts  

暂不清楚

2.7.mock

Ant Design of Vue 零熟练度学习记录_第5张图片

利用mock模拟处理api请求 方便前后端分离开发

2.8.router

vue路由(配置文件在config目录下)

2.9.store

Ant Design of Vue 零熟练度学习记录_第6张图片

vuex的store

参见 https://vuex.vuejs.org/

2.10.utils 

Ant Design of Vue 零熟练度学习记录_第7张图片

antd vue用到的工具

2.11.view

Ant Design of Vue 零熟练度学习记录_第8张图片

 vue文件

2.12.src根目录下的文件

App.vue  main.js程序入口

permission.js  见下方

3.部分文件(并不)详(细的)解(释)

3.1src/permission.js

import Vue from 'vue'
import router from './router'
import store from './store'

import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import notification from 'ant-design-vue/es/notification'
import { setDocumentTitle, domTitle } from '@/utils/domUtil'
import { ACCESS_TOKEN } from '@/store/mutation-types'

NProgress.configure({ showSpinner: false }) // NProgress Configuration

const whiteList = ['login', 'register', 'registerResult'] // no redirect whitelist

router.beforeEach((to, from, next) => {
  NProgress.start() // start progress bar
  to.meta && (typeof to.meta.title !== 'undefined' && setDocumentTitle(`${to.meta.title} - ${domTitle}`))
  if (Vue.ls.get(ACCESS_TOKEN)) {
    /* has token */
    if (to.path === '/user/login') {
      next({ path: '/dashboard/workplace' })
      NProgress.done()
    } else {
      if (store.getters.roles.length === 0) {
        store
          .dispatch('GetInfo')
          .then(res => {
            const roles = res.result && res.result.role
            store.dispatch('GenerateRoutes', { roles }).then(() => {
              // 根据roles权限生成可访问的路由表
              // 动态添加可访问路由表
              router.addRoutes(store.getters.addRouters)
              const redirect = decodeURIComponent(from.query.redirect || to.path)
              if (to.path === redirect) {
                // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
                next({ ...to, replace: true })
              } else {
                // 跳转到目的路由
                next({ path: redirect })
              }
            })
          })
          .catch(() => {
            notification.error({
              message: '错误',
              description: '请求用户信息失败,请重试'
            })
            store.dispatch('Logout').then(() => {
              next({ path: '/user/login', query: { redirect: to.fullPath } })
            })
          })
      } else {
        next()
      }
    }
  } else {
    if (whiteList.includes(to.name)) {
      // 在免登录白名单,直接进入
      next()
    } else {
      next({ path: '/user/login', query: { redirect: to.fullPath } })
      NProgress.done() // if current page is login will not trigger afterEach hook, so manually handle it
    }
  }
})

router.afterEach(() => {
  NProgress.done() // finish progress bar
})

控制路由请求的文件,控制页面跳转的权限

3.1.1.NProgress

进度条,包括动画等

3.1.2.router.beforeEach() :

vue router的导航守卫,在进行router导航之前均执行该方法

守卫方法接收三个参数:

  • to: Route: 即将要进入的目标 路由对象

  • from: Route: 当前导航正要离开的路由

  • next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

    • next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。

    • next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。

    • next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: truename: 'home' 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。

    • next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。

确保要调用 next 方法,否则钩子就不会被 resolved。

参见:https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%85%A8%E5%B1%80%E5%89%8D%E7%BD%AE%E5%AE%88%E5%8D%AB

 

你可能感兴趣的:(vue,Ant,Design,of,Vue)