首页 > 其他分享 >vue3 + ts

vue3 + ts

时间:2023-02-21 21:13:45浏览次数:39  
标签:vue return vue3 ts router import const

安装

# Vite 需要 Node.js 版本 >= 12.0.0
npm init vite@latest

# 根据相关问题进行回答
# 需要选择 框架以及使用语言 配置项目名

# 进入项目目录
cd vite-project
# 安装依赖
npm install
# 运行项目
npm run dev

习惯Vue2脚手架中用 @符号指向Src的习惯了 在Vite中配置一下

配置vite.config.ts和tsconfig.json

 

// viet.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'

export default defineConfig({
  plugins: [vue()],
  resolve: {
    alias: {
      // 配置别名指向src目录
      '@': resolve(__dirname, 'src') //注如果__dirname报错存在找不到npm install @types/node -D
    },
    // 使用别名的文件后缀
    extensions: ['.js', '.json', '.ts']
  },
  //服务器的端口监听端口配置和host设置
  server: {
    host: 'localhost',
    port: 8099,
    https: false
  }
})

Vue-Router

# Vue-Router 4+ 版本支持 Vue3
npm install vue-router@4

新建 目录/文件夹 src/router/index.ts

// index.ts
import { createRouter,createWebHashHistory,RouteRecordRaw } from 'vue-router';

// 添加类型校验
const routes: RouteRecordRaw[] = [
    {
        path: "/",
        name: "home",
        component: ()=>import('@/components/HelloWorld.vue')
    },
    {
        path: "/logIn",
        name: "logIn",
        component: ()=>import('@/view/LogIn.vue')
    },
]

// 创建router
const router = createRouter({
    // 配置为Hash模式
    history: createWebHashHistory(),
    // 配置toures
    routes,
    // 路由跳转时返回顶部
    scrollBehavior () {
        return {top: 0}
    }
})

// 设置前置路由守卫
router.beforeEach((to, from, next) => {
    next()
})

// 设置后置路由守卫
router.afterEach((to, from, failure) => {
    
})

export { router }
// main.ts
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
const app = createApp(App)
// 引入Pinia
import { createPinia } from 'pinia'
// 引入router
import { router } from './router'
app.use(router)
// 创建 Pinia 实例
const pinia = createPinia()
// 挂载到 Vue 根实例
app.use(pinia)
app.mount('#app')

状态管理Pinia

安装npm install pinia
新建 目录/文件 src/store/index.ts
// index.ts
  

Pinia从使用角度和之前的Vuex一样。

Store是保存状态与业务逻辑的实体,有三个核心概念。

◆state:存储全局状态

◆getters:类似于组件的computed,根据已有state封装派生数据,也具有缓存的特性

◆actions:类似于组件的methods,用来封装业务逻辑,支持同步和异步
/**
 *    1. 定义容器并导出
 *    2. 使用容器中的state
 *    3. 修改容器中的state
 *    4. 使用容器中的action
 */
import { defineStore } from "pinia";

/**
 * 1. 定义容器并导出
 * 参数一: 容器ID, 唯一, 将来 Pinia 会把所有的容器挂载到根容器
 * 参数二: 选项对象
 * 返回值: 函数, 调用的时候要空参调用, 返回容器实例
 */
export const mainStore = defineStore('main', {
    /**
     * 类似组件的 data, 用于存储全局的的状态
     * 注意:
     *    1.必须是函数, 为了在服务端渲染的时候避免交叉请求导致的数据交叉污染
     *    2.必须是箭头函数, 为了更好的 TS 类型推导
     */
    state: () => {
        return {
            state: {
                token: true
            }
        }
    },
    /**
     * 类似组件的 computed, 用来封装计算属性, 具有缓存特性
     */
    getters: {

    },
    /**
     * 类似组件的 methods, 封装业务逻辑, 修改state
     * 注意: 里面的函数不能定义成箭头函数(函数体中会用到this)
     */
    actions: {

    }
})

安装Axios

npm insall axios

新建 目录/文件 src/utils/request.ts src/api/user.ts

// request.ts

import axios from 'axios'
// 导入pinia
import { mainStore } from '@/store'
const store = mainStore()

// 创建axios
const $http = axios.create({
    //设置默认请求地址
    baseURL: 'http://localhost:8080',
    //设置请求超时时间
    timeout:5000,
    //设置请求头
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
    }
})


// 请求拦截器
$http.interceptors.request.use(config => {
    // 验证 token
    const token = store.state.token;
    if (config.headers!= undefined) config.headers.Authorization = token
    return config;
},error => {
    return Promise.reject(error);
})

//响应拦截
$http.interceptors.response.use(res => {

    // 状态码为200正常返回
    if (res.status === 200) {
        return Promise.resolve(res);
    } else {
        return Promise.reject(res);
    }
}, error => {
    return Promise.reject(error);
})

// 导出封装的axios
export default $http

// api/user.ts
import request from '@/utils/request'

export function login(data: object) {
  return request({
    url: '/Login',
    method: 'post',
    data
  })
}

export function getInfo(token: object) {
  return request({
    url: '/user/info',
    method: 'get',
    params: { token }
  })
}

export function logout() {
  return request({
    url: '/logout',
    method: 'post'
  })
}

  

 

标签:vue,return,vue3,ts,router,import,const
From: https://www.cnblogs.com/1542986913Yu/p/17142271.html

相关文章

  • vue3 vite异步组件路由懒加载
    引言在Vue2中,异步组件和路由懒加载处理使用import就可以很轻松实现。但是在Vue3.x中异步组件的使用与Vue2.x完全不同了。本文就详细讲讲vue3中异步组件和路由懒......
  • 错误记录:error: #3093: anonymous structs are only supported in --gnu mode, or wh
    1错误记录..\Modules\libdw1000\inc\libdw1000Types.h(39):error:#3093:anonymousstructsareonlysupportedin--gnumode,orwhenenabledwith#pragmaanon_......
  • TS进阶知识点
    1.TS内置高级类型Partial&Pick&Required&Readonly 1.1、Partial Partial可以快速把某个接口类型中定义的所有属性变成可选的interfaceApiKey{ id:number; ......
  • 一张图看懂CodeArts Build 6大特性,带你玩转构建服务
    华为云编译构建服务CodeArtsBuild为开发者提供配置简单的混合语言构建平台,实现编译构建云端化,支撑企业实现持续交付,缩短交付周期,提升交付效率。CodeArtsBuild支持编译构建......
  • TS声明文件
    1.什么是声明当使用第三方库时,很多三方库不是用TS写的,我们需要引用它的声明文件,才能获得对应的代码补全、接口提示等功能。比如,在TS中直接使用Vue,就会报错,consta......
  • 论今日,Vue VSCode Snippets 不进行代码提示的问题 或 vetur Request textDocument/doc
    这他喵的是因为vetur这个鬼东西升级了,然后和项目中某些包不匹配了,降级就好了,法克尤啊法克尤,我整了一天,大概是坏了吧灵感来源:https://cxymm.net/article/a843334549/1......
  • python __slots__魔法
    先谈谈python中__dict__存储了该对象的一些属性类和实例分别拥有自己的__dict__在__init__中声明的变量,会存到实例的__dict__中类的静态函数、类函数、普通函数、全局......
  • 字节流的基本流:FileInputStream
    FileInputStream的基本用法字节输出流的循环读取文件的拷贝文件拷贝的弊端和改进方案FileInputStream的基本用法packagecom;importjava.io.*;public......
  • 直播软件搭建,vue3 页面回到顶部(平缓滚动效果)
    直播软件搭建,vue3页面回到顶部(平缓滚动效果) common.js //页面回到顶部(滚动效果)exportconsthandleScroll=()=>{  letscrollTop=window.pageYOffset||d......
  • 开心档之Bootstrap4 自定义表单
    Bootstrap4自定义表单Bootstrap4可以自定义一些表单的样式来替换浏览器默认的样式。 自定义复选框如果要自定义一个复选框,可以设置<div>为父元素,类为.custom-c......