zoukankan      html  css  js  c++  java
  • vue-typescript-element-template使用总结

    vue-typescript-element-template使用总结

    一、请求
    1、定义接口
    import request from '@/utils/request'
    
    export const 方法 = (params: params类型, data: data类型) =>
      request({
        url: '地址',
        method: 'get/post/put/delete',
        params,
        data
      })
    
    2、请求拦截器
    import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'
    
    const service = axios.create({
      baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
      timeout: 5000
    })
    
    // Request interceptors
    service.interceptors.request.use(
      (config) => {
        config.headers['token'] = 'token'
    
        return config
      },
      (error) => {
        return Promise.reject(error)
      }
    )
    
    // Response interceptors
    service.interceptors.response.use(
      (response) => {
        return response
      },
      (error) => {
        return Promise.reject(error)
      }
    )
    
    interface IResult<T> {
      code: number
      data: T
      message: string
    }
    
    export default function <T>(config: AxiosRequestConfig) {
      return service(config).then((value: AxiosResponse): IResult<T> => {
        return value.data
      })
    }
    
    二、组件
    1、Component
    import { Component, Vue } from 'vue-property-decorator'
    
    @Component({
      name: 'name'
    })
    export default class extends Vue {
      // 可在模板(template)中使用
      private 属性: 属性类型 = 值;
    
      // 可在模板(template)中使用
      private 方法(参数: 参数类型): 返回值类型 {
        // 可以使用this
        return 返回值;
      }
    
      // 生命周期
      created() {
        // 可以使用this
      }
    }
    
    2、watch
    import { Component, Vue, Watch } from 'vue-property-decorator'
    
    @Component({
      name: 'name'
    })
    export default class extends Vue {
      @Watch('监听属性')
      private 方法(监听属性: 属性类型) {
        // 可以使用this
      }
    }
    
    3、prop
    import { Component, Prop, Vue } from 'vue-property-decorator'
    
    @Component({
      name: 'name'
    })
    export default class extends Vue {
    
      // !表示非null和非undefined的断言,否则属性的类型后面需要加上undefined类型
      @Prop({ 
        type: Boolean,
        required: true,
        default: false,
        validator(value: any): boolean {
          return !!value
        }
      })
      private 属性!: 类型   
    }
    
    4、$emit
    import { Component, Vue } from 'vue-property-decorator'
    
    @Component({
      name: 'name'
    })
    export default class extends Vue {
      private 方法() {
        this.$emit('事件', 参数)
      }
    }
    
    5、$route和$router
    import { Component, Vue } from 'vue-property-decorator'
    
    @Component({
      name: 'name'
    })
    export default class extends Vue {
      private 方法() {
        console.log(this.$route)
        this.$router.push(路径)
      }
    }
    
    6、computed和store
    import { Component, Vue } from 'vue-property-decorator'
    import { TestModule } from '@/store/modules/test'
    
    @Component({
      name: 'name'
    })
    export default class extends Vue {
      get 计算属性() {
        return TestModule
      }
    }
    
    7、filters
    import { Component, Vue } from 'vue-property-decorator'
    
    @Component({
      name: 'name',
      filters: {
        过滤器() {
          return '返回值'
        }
      }
    })
    export default class extends Vue {}
    
    三、路由
    1、路由配置
    import Vue from 'vue'
    import Router from 'vue-router'
    
    Vue.use(Router)
    
    export default new Router({
      // 默认'hash'
      // mode: 'history',
      // 滚动行为(前进后退页面记录滚动值)
      scrollBehavior: (to, from, savedPosition) => {
        if (savedPosition) {
          return savedPosition
        } else {
          return { x: 0, y: 0 }
        }
      },
      // 实操,未出结果
      base: 路径,
      routes: [
        {
          path: 路径,
          component: 组件,
          redirect: 重定向路径,
          children: [
            {
              // 组件<keep-alive>时一定要配置,且与组件name一致,且唯一
              name: 'name',
              path: 路径(前面不加/:父路径/子路径),
              component: () => import(组件路径),
              meta: {
                hidden: true,
                title: 'title',
                icon: 'icon',
                affix: true,
                // 与<keep-alive>配合使用
                noCache: true
              }
            }
          ]
        }
      ]
    })
    
    2、路由守卫
    import router from './router'
    import { Route } from 'vue-router'
    
    /**
     * next用法:
     *   next({ path: '/' })
     *   next({ ...to, replace: true })
     *   next(`/login?redirect=${to.path}`)
     *   next()
     */
    router.beforeEach(async(to: Route, from: Route, next: any) => {
      next()
    })
    
    router.afterEach((to: Route) => {
    })
    
    3、main.js
    import Vue from 'vue'
    import router from '@/router'
    import '@/permission'
    import App from '@/App.vue'
    
    new Vue({
      router,
      render: (h) => h(App)
    }).$mount('#app')
    
    四、存储
    1、store
    import Vue from 'vue'
    import Vuex from 'vuex'
    import { IAppState } from './modules/app'
    
    Vue.use(Vuex)
    
    export interface IRootState {
      app: IAppState
    }
    
    export default new Vuex.Store<IRootState>({})
    
    2、modules
    import { VuexModule, Module, Mutation, Action, getModule } from 'vuex-module-decorators'
    import store from '@/store'
    
    export interface IAppState {
      bool: boolean
    }
    
    @Module({ dynamic: true, store, name: 'app' })
    class App extends VuexModule implements IAppState {
      public bool = false
      
      // getter
      get getBool(): boolean {
        return this.bool
      }
    
      @Mutation
      private SET_BOOL(bool: boolean) {
        this.bool = bool
      }
    
      @Action
      public setBool(bool: boolean) {
        this.SET_BOOL(bool)
      }
    }
    
    export const AppModule = getModule(App)
    
    3、main.js
    import Vue from 'vue'
    import store from '@/store'
    import App from '@/App.vue'
    
    new Vue({
      store,
      render: (h) => h(App)
    }).$mount('#app')
    
  • 相关阅读:
    三角函数图像平移后重合对称
    三角恒等式的证明
    三角函数给值求角
    三角方程的解法
    空间中线面位置关系的证明思路
    实时会议
    LATEX 公式总结
    三维重建的应用
    会议
    计算机图形学学习笔记
  • 原文地址:https://www.cnblogs.com/linding/p/15146418.html
Copyright © 2011-2022 走看看