0
点赞
收藏
分享

微信扫一扫

Vue 3.0 脚手架配置 (TypeScript + less的px转rem + 反向代理 + axios + vuex )

殇感故事 2022-04-18 阅读 59
vue前端

目录

一、创建项目

二、less的px转rem

三、配置反向代理 + axios

四、vuex传值测试


一、创建项目

1.新建一个文件夹  (不能为中文)

        

 

2.打开命令行窗口 

        方式一:文件路径栏输入 cmd 后回车

        

        效果:

        

        方式二:按win+r键打开运行 输入cmd打开命令行窗口  

        

        d:  回车 (切换到文件所在盘符)   

        

         cd: + 文件绝对路径   回车 (进入文件目录)

         

 3.创建vue脚手架

        1.命令行输入 vue create .   

        

        2.回车后提示 : 是否在此目录创建项目   输入 y后回车继续

        

        3.选择预设 按方向键切换到最后一个 手动选择功能  然后回车

       

        4.选择需要的功能  用空格选中 选好后回车 

        

         5.选择vue版本  这里选择3.x   然后回车

        

        6. 之后的提示全部选 n

        

         7.选择css预处理器 这里选择less

          

         8.单元测试方案 ,选择默认的第一个

        

        9.选择配置的保存位置  选第二个

        

         10.是否保存为预设  按需设置  如果保存为预设 需要设置预设的名字

        

        

         11.等待下载

        

         12.下载完成后 如图  

        

         13.此时输入 npm run serve  即可启动项目

 

二、less的px转rem

1.移动端适配

        1.项目启动后 在命令行中按ctrl + c 停止运行项目

        2.命令行输入以下代码 下载'lib-flexible' 'postcss-px2rem-exclude'  两个插件

npm i lib-flexible postcss-px2rem-exclude  -save

         3.下载完成后 用vscode打开项目 在入口文件 main.ts 中 引入 lib-flexible ( import 'lib-flexible')

        

 2.px转rem

        1.在项目根目录下创建 vue.config.js    并在里面配置

         

// vue.config.js
module.exports = {
  css:{
    loaderOptions:{
      postcss:{
        plugins:[
          require('postcss-px2rem-exclude')({
            remUnit:75,
            exclude:/node_modules/
          }),//换算的基数
        ]
      }
    }
  },
}

        2.打开package.json文件 ,添加:

"postcss":{
    "plugins":{
      "autoprefixed":{}
    }
  }

         

        3.配置完成后, 重启项目

三、配置反向代理 + axios

1.反向代理

       打开vue.config.js配置文件,在module.exports 中添加以下代码

       

devServer: {
    proxy: {
        //    配置跨域
        '/api': {
            target: 'http://....................',      //这里是后端接口地址
                changeOrigin: true,
                pathRewrite: {
                '^/api': ''
            }
        }
    }
}

  2.配置axios

         1.下载axios:

npm install axios --save

         2.在src目录下创建api文件夹 , 文件夹内创建 index.ts 和 request.ts 两个文件

        request.ts中:

import axios from "axios";
export const Service = axios.create({
    timeout: 8000, //延迟时间
    method: 'POST',
    headers: {
        "content-Type": "application/x-www-form-urlencoded",
        "pc-token": "4a82b23dbbf3b23fd8aa291076e660ec", //后端提供
    }
})
// 请求拦截
Service.interceptors.request.use(config => {
    return config
})
// 响应拦截
Service.interceptors.response.use(response => {
    return response.data
}, err => {
    console.log(err)
})

        index.ts中:

import { Service } from "./request";
interface searchConfig {
    page: number | string
    mod: string
}
interface getConfig {
    page: number | string
}
// 搜索接口
export function searchCar(config: searchConfig) {
    const params = new URLSearchParams()

    params.append('page', config.page as string);
    params.append('mod', config.mod);

    return Service({
        url: "./api/oldcar/searchCar",
        data: params
    })
}

// 列表接口
export function getCarList(config: getConfig) {
    const params = new URLSearchParams()
    params.append('page', config.page as string)
    return Service({
        url: "/api/oldcar/getCarList",
        data: params
    })
}

        3.在view/about中测试:

<template>
  <div class="about">
    <h1>This is an about page</h1>
    <button @click="getData">获取数据</button>
  </div>
</template>
<script>
import { getCarList } from "@/api"; //引用
export default {
  methods: {
    async getData() {
      this.car_list = await getCarList({ page: 1 });
    },
  },
  async created() {
    console.log(await getCarList({ page: 1 }));
  },
};
</script>

点击按钮获取数据

 

四、vuex传值测试

        1.store/index.ts

import { createStore } from 'vuex'
export default createStore({
  state: {
    name: ''
  },
  mutations: {
    setState(state, args) {
      state.name = args
    }
  },
  actions: {
    setStateName({ commit }, args) {
      commit('setState', args)
    }
  },
  getters: {
    getState(state) {
      return state.name
    }
  },
  modules: {
  }
})

home:

<template>
  <div class="home"><button @click="button">vuex传值</button></div>
</template>

<script>
import { mapActions } from "vuex";
export default {
  name: "Home",
  methods: {
    ...mapActions(["setStateName"]),
    button() {
      this.setStateName("这是Home传的值");
      this.$router.push("/about");
    },
  },
};
</script>

about:

<template>
  <div class="about">
    <h1>This is an about page</h1>
    <button @click="getData">获取数据</button>
    <!-- vuex  -->
    <p>{{ getState }}</p>
  </div>
</template>
<script>
import { getCarList } from "@/api"; //引用
import { mapGetters } from "vuex"; //vuex
export default {
  methods: {
    async getData() {
      this.car_list = await getCarList({ page: 1 });
    },
  },
  async created() {
    console.log(await getCarList({ page: 1 }));
  },
  computed: {
    ...mapGetters(["getState"]), //vuex
  },
};
</script>

完结散花

举报

相关推荐

0 条评论