亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何實現ts+vuecli4重構項目

發布時間:2020-07-23 09:37:57 來源:億速云 閱讀:326 作者:小豬 欄目:web開發

這篇文章主要講解了如何實現ts+vuecli4重構項目,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

項目背景:

一個以前的項目( 剛入職實習的時候寫的,用的vuecli2 ),然后這次要添加修改東西,看著代碼看的頭大,沖動之下就重構了( 想打死自己,寫的啥玩意 ),剛好用下最近剛學的typescript,從搭建開始,一步步更新記錄下,怕自己之后忘了再回過頭來看看。( 順便說一句,用起來有點別扭,不過還是挺爽的,期待vue3.0...

一.項目搭建:

使用命令   vue create news 創建項目

配置自定義,貼一下我自定義的安裝依賴     

如何實現ts+vuecli4重構項目

ts+vuex+router這幾個肯定是要的,這里的css我選擇的是scss,unit測試也來一個

之后一些的選項就自己選擇

3. 搭建好后目錄就是這樣

├── public             // 靜態頁面

├── src               // 主目錄

  ├── assets           // 靜態資源

  ├── components         // 組件

  ├── views            // 頁面

  ├── App.vue           // 頁面主入口

  ├── main.ts           // 腳本主入口

  ├── router.ts          // 路由

  ├── shims-tsx.d.ts       // 相關 tsx 模塊注入

  ├── shims-vue.d.ts       // Vue 模塊注入

  └── store.ts          // vuex 配置

├── tests              // 測試用例

├── .eslintrc.js          // eslint 相關配置

├── .gitignore           // git 忽略文件配置

├── babel.config.js         // babel 配置

├── postcss.config.js        // postcss 配置

├── package.json          // 依賴

└── tsconfig.json          // ts 配置

想著為了以后更好的維護,就修改了一下目錄結構

├── public             // 靜態頁面

├── src               // 主目錄

  ├── api             // 接口

  ├── assets           // 靜態資源

  ├── filters           // 過濾

  ├── store            // vuex 配置

  ├── styles           // 樣式

  ├── utils            // 工具方法(axios封裝,全局方法等)

  ├── views            // 頁面

  ├── App.vue           // 頁面主入口

  ├── main.ts           // 腳本主入口

  ├── router.ts          // 路由

  ├── shime-global.d.ts      // 相關 全局或者插件 模塊注入

  ├── shims-tsx.d.ts       // 相關 tsx 模塊注入

  ├── shims-vue.d.ts       // Vue 模塊注入, 使 TypeScript 支持 *.vue 后綴的文件

├── tests              // 測試用例

├── .eslintrc.js          // eslint 相關配置

├── postcss.config.js        // postcss 配置

├── .gitignore           // git 忽略文件配置

├── babel.config.js         // preset 記錄

├── package.json          // 依賴

├── README.md            // 項目 readme

├── tsconfig.json          // ts 配置

└── vue.config.js          // webpack 配置

tsconfig.js是ts的配置項

4.初步修改vue.config.js

const path = require("path");
const webpack = require('webpack');

function resolve(dir) {
 return path.join(__dirname, dir)
}
const router='http://xxx.xxx.xxx'

module.exports = {
 publicPath: "./",  //基本路徑
 outputDir: 'dist', //打包時生成的文件夾
 lintOnSave: process.env.NODE_ENV === 'development', 
 productionSourceMap: process.env.NODE_ENV === 'development', 
 devServer: {
  port: 8080,
  open: true,
  proxy: {
   '/test': {
    target: router,
    changeOrigin: true
   }
  }
 },
 configureWebpack: {
  name: process.env.VUE_APP_NAME,
  resolve: {
   alias: {
    '@': resolve('src'),
   }
  },
  externals: {},
  plugins: [],
 },
}

至此,項目初步搭建完成,然后就開始封裝安裝插件

二. 安裝插件和基本內容填充

這里我使用 的element-ui,echarts, babel-polyfill,jquery等

這里有個注意的,在typescript 中使用jquery,echarts等插件的 時候,必須要安裝對應的聲明文件,當然typescripe社區已經有很多大佬寫好了,前人種樹,后人乘涼復制代碼

什么是聲明文件:

https://github.com/xcatliu/typescript-tutorial/blob/master/basics/declaration-files.md

聲明文件搜索地址: microsoft.github.io/TypeSearch/

untils 文件夾(可以放一些常用的工具函數,節流、防抖、localStorage等)                    

這個里面我存放了一些工具函數,date函數,axios的封裝等

styles 文件夾  (存放全局scss文件)

這里面除了初始化一些樣式外,我還定義了一些常亮,例如導航欄的高度,顏色等,便于          好改

router 文件夾(懶加載)

因為這個系統權限之類的并沒有很復雜,路由也不是很多,就沒有按模塊引入,就直接寫了。

 /* webpackChunkName: "login" */  /*這里名字是什么,打包出來的名字就是什么*/ 
{
  path: '/',
  name: 'login',  
  component: () => import(/* webpackChunkName: "login" */ '@/views/login/index.vue'),
  meta: {
   title:'登錄頁'
   keepAlive: false,
  }
 },
 {
  path: "/home",
  name: "home",
  redirect: "/homepage",    
  component: () => import(/* webpackChunkName: "home" */"@/views/Home.vue"),
  children: [
   {
    path: "/homepage",
    component: () => import(/* webpackChunkName: "homepage" */ "@/views/homepage/index.vue"),
    name: "homepage",
    meta: {
     title: "首頁", keepAlive: true
    }
   }, 
  ]
}

api  文件夾

根據不同模塊的接口,去建不同的文件

三.vue中typescript的寫法

typescript的寫法和vue差不多,只是script的區別,例:

import { Component, Prop, Vue, Watch } from 'vue-property-decorator'
@Component({ 
  name: 'homepage', 
  components: {}
})

export class MyComponent extends Vue { 
 @Prop({ default: '' }) private name!: string 
 @Watch('name', { deep: true }) 
 changeName(newVal,olVal){}

  //data
  private count:number=5
  private arr:string[]=[]
  mounted(){}

  //methods
  private test(){}
}

四.typescript使用中的問題

1.獲取refs 

寫法:

let layoutList:any = this.$refs.layout as HTMLDivElement

2.引用插件,且找不到聲明文件或引用Json文件

在shims-vue.d.ts 文件中聲明,再在組件中引用

declare module "*.json" { 
  const value: any; 
  export default value;
}
declare module "vue-count-to" { 
  const count: any; 
  export default count;
}

頁面里面

import * as myJson from '../../../public/test.json'

使用  myJson.default

3.計算屬性

get age() { 
  return this.aTagDatasF.filter(item => item.visible)
}

4.@prop

@Prop()private datas!: any

感嘆號是非null和非undefined的類型斷言,所以上面的寫法就是對datas這個屬性進行非空斷言

5.引入vue組件時,后面必須加  .vue

6.定義接口類型,前面加 I,例如,接口盡量定義類型,規范管理

interface IUserInfo{
  name:string,
  index:number
}

7.定義全局變量(可以用vuex取代)

在.ts文件里面  

export var User:IUserInfo={  
  name:'111',
  index:996
}

其他頁面import ,然后 就可以獲取到這個值

8.強行讓ts不檢測

//@ts-ignore  下一行不檢測

五.開始改造頁面代碼(開始吐槽自己)

槽點1:組件切換

以前的代碼(部分片段)

如何實現ts+vuecli4重構項目

改造后:用component   用is去動態判斷就行

<div class="haveClick>
  <component :is="echartsIndex" :obj="obj"/>
</div>

槽點2:對象賦值

以前的代碼(部分片段):

如何實現ts+vuecli4重構項目

改造后:

//這樣寫是因為initObj還有別的key

for(let i in this.obj){
  if(this.initObj(i)!=undefined){ 
   this.initObj[i]=this.obj[i]
  }
}

//或者  
 寫一個函數,如果key值一樣就賦值

槽點3:switch case 判斷之前的代碼:

//片段,有十幾個case

optionList:['餅圖','柱狀圖','折線圖','...']

篩選下拉后,aa為index
switch (aa) {
    case 0: this.getData() break;
    case 1: this.avgBqzs() break;
    case 2: this.areaCount() break;
    case 3: this.yiqing() break;
    case 4: this.avgFinish() break;
 }

修改后:

private optionList=[{
  title:'餅圖', 
  type:'getData'
},{ 
  title:'柱狀圖',
  type:'avgBqzs'}
 ......
] 
下拉后,用change事件獲取 item (這里就不獲取index了)
例如:
changeSelect(item:any){
  //當然這里不能通過ts的編譯  @ts-ignore
  this[item.type]()}

六.個人項目規范

1.盡量不要使用for,使代碼觀賞性更高   

forEach 遍歷 , map轉換,filter 過濾

2.調接口使用 盡量 async和await來調用接口

例如:

private async getData() {  
  const { data } = await getTransactions({})
}

3.只需要部分篩選條件的時候用解構去獲取值

public sizeTop={
 id:'',
 City:'',
 County:'',
 time:''
}

const {City,County}=this.sizeTop

 private async getData() {  
  const { data } = await getTransactions({City,County})
 }

看完上述內容,是不是對如何實現ts+vuecli4重構項目有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

靖宇县| 嫩江县| 乐昌市| 德州市| 邵阳县| 九龙县| 长阳| 石家庄市| 新昌县| 阳城县| 裕民县| 连城县| 铁岭市| 同仁县| 伊川县| 牡丹江市| 望江县| 南投市| 西林县| 开鲁县| 蓬溪县| 杭锦后旗| 岳阳县| 皋兰县| 绵阳市| 阿克| 安国市| 三门县| 六安市| 临湘市| 昆明市| 莎车县| 丰原市| 耿马| 宜州市| 冕宁县| 兴山县| 肥东县| 兰西县| 开鲁县| 精河县|