日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue-cli3中使用TS語法示例代碼

瀏覽:278日期:2022-06-02 08:32:30
目錄
  • ts有什么用?
  • 為什么用ts?
  • 1、引入Typescript包
  • 2、配置
  • 3、讓項目識別.ts
  • 4、vue組件的編寫

ts有什么用?

類型檢查、直接編譯到原生js、引入新的語法糖

為什么用ts?

TypeScript的設計目的應該是解決JavaScript的“痛點”:弱類型和沒有命名空間,導致很難模塊化,不適合開發大型程序。另外它還提供了一些語法糖來幫助大家更方便地實踐面向對象的編程。

typescript不僅可以約束我們的編碼習慣,還能起到注釋的作用,當我們看到一函數后我們立馬就能知道這個函數的用法,需要傳什么值,返回值是什么類型一目了然,對大型項目的維護性有很大的提升。也不至于使開發者搬起石頭砸自己的腳。

1、引入Typescript包

npm install vue-class-component vue-property-decorator --save
npm install ts-loader typescript tslint tslint-loader tslint-config-standard --save-dev
  • vue-class-component:擴展vue支持typescript,將原有的vue語法通過聲明的方式來支持ts
  • vue-property-decorator:基于vue-class-component擴展更多裝飾器
  • ts-loader:讓webpack能夠識別ts文件
  • tslint-loader:tslint用來約束文件編碼
  • tslint-config-standard: tslint 配置 standard風格的約束

2、配置

webpack配置

根據項目的不同配置的地方不同,如果是vue cli 3.0創建的項目需要在vue.config.js中配置,如果是3.0以下版本的話,需要webpack.base.conf中配置。(以下說明是在webpack.base.conf文件中更改)

2.1 在webpack.base.conf文件中更改

2.1.1. 在resolve.extensions中增加.ts,目的是在代碼中引入ts文件不用寫.ts后綴

  resolve: {
    extensions: [".js", ".vue", ".json", ".ts"],
    alias: {}
  }

2.2.2. 在module.rules中增加ts的rules

 module: {
    rules: [
      {
test: /\.ts$/,
exclude: /node_modules/,
enforce: "pre",
loader: "tslint-loader"
      },
      {
test: /\.tsx?$/,
loader: "ts-loader",
exclude: /node_modules/,
options: {
  appendTsSuffixTo: [/\.vue$/]
}
      }
    ]
  }

2.2.3. tsconfig.json配置
ts-loader會檢索文件中的tsconfig.json.以其中的規則來解析ts文件,詳細的配置可以參考https://www.tslang.cn/docs/handbook/tsconfig-json.html
我項目的tsconfig.json文件

{
  // 編譯選項
  "compilerOptions": {
    // 輸出目錄
    "outDir": "./output",
    // 是否包含可以用于 debug 的 sourceMap
    "sourceMap": true,
    // 以嚴格模式解析
    "strict": false,
    // 采用的模塊系統
    "module": "esnext",
    // 如何處理模塊
    "moduleResolution": "node",
    // 編譯輸出目標 ES 版本
    "target": "es5",
    // 允許從沒有設置默認導出的模塊中默認導入
    "allowSyntheticDefaultImports": true,
    // 將每個文件作為單獨的模塊
    "isolatedModules": false,
    // 啟用裝飾器
    "experimentalDecorators": true,
    // 啟用設計類型元數據(用于反射)
    "emitDecoratorMetadata": true,
    // 在表達式和聲明上有隱含的any類型時報錯
    "noImplicitAny": false,
    // 不是函數的所有返回路徑都有返回值時報錯。
    "noImplicitReturns": true,
    // 從 tslib 導入外部幫助庫: 比如__extends,__rest等
    "importHelpers": true,
    // 編譯過程中打印文件名
    "listFiles": true,
    // 移除注釋
    "removeComments": true,
    "suppressImplicitAnyIndexErrors": true,
    // 允許編譯javascript文件
    "allowJs": true,
    // 解析非相對模塊名的基準目錄
    "baseUrl": "./",
    // 指定特殊模塊的路徑
    "paths": {
      "jquery": [
"node_modules/jquery/dist/jquery"
      ]
    },
    // 編譯過程中需要引入的庫文件的列表
    "lib": [
      "dom",
      "es2015",
      "es2015.promise"
    ]
  }
}

2.2.4. tslint.json配置
在目錄中新增tslint.json文件,由于我們前面安裝了tslint-config-standard,所以可以直接用tslint-config-standard中規則,文件如下:

  {
    "extends": "tslint-config-standard",
    "globals": {
      "require": true
    }
  }

2.2 在vue.config.js文件中更改以下代碼即可

configureWebpack: {
  resolve: {
    extensions: [".ts", ".tsx", ".js", ".json"],  
     alias: {}
  },
  module: {
    rules: [    
      {    
test: /\.tsx?$/,    
loader: "ts-loader",    
exclude: /node_modules/,    
options: {
  appendTsSuffixTo: [/\.vue$/],    
}    
      }
    ]    
  }    
},

3、讓項目識別.ts

由于 TypeScript 默認并不支持 *.vue 后綴的文件,所以在 vue 項目中引入的時候需要創建一個 vue-shim.d.ts 文件,放在根目錄下

declare module "*.vue" {
  import Vue from "vue";
  export default Vue;
}

4、vue組件的編寫

vue組件里大多數的方法改成通過@xxx(裝飾器)來表明當前定義的為什么數據。業務邏輯js的部分就可以直接采用ts的寫法了。

基本寫法

模板template和樣式style的寫法不變,script的模塊進行了改變,寫法如下:

<script lang="ts">
import { Component, Vue } from "vue-property-decorator";
@Component
export default class Test extends Vue {
 
};
</script>
  • lang="ts"script聲明當前語言是ts
  • @Component:注明此類為一個vue組件
  • export default class Test extends Vue: export當前組件類是繼承vue的

data()中定義數據

data中的數據由原來的data()方法改成直接在對象中定義

export default class Test extends Vue {
 public message1: string = "heimayu";
 public message2: string = "真好看";
}

生命周期

 // 生命周期
    private created(){
this.init();
    }

方法

private init(){
    console.log("halo");
}

props傳值

props的話就沒有data那么舒服了,因為他需要使用裝飾器了,寫法如下

@Prop()
propA:string
 
@Prop()
propB:number

$emit傳值

不帶參數

  // 原來寫法:this.$emit("bindSend")
  // 現在直接寫 this.bindSend()
  // 多個定義
  @Emit()
  bindSend():string{
      return this.message
  }

方法帶參數

  // 原來寫法:this.$emit("bindSend", msg)
  // 現在直接寫: this.bindSend(msg)
  // 多個下面的定義
  @Emit()
  bindSend(msg:string){
      // to do something
  }

emit帶參數

  // 這里的test是改變組件引用的@事件名稱這時候要寫@test 而不是@bindSend2
   @Emit("test")
  private bindSend2(){
      return "這個可以用test接受";
  }

watch觀察數據

  // 原來的寫法 watch:{}
  @Watch("propA",{
      deep:true
  })
  test(newValue:string,oldValue:string){
      console.log("propA值改變了" + newValue);
  }

computed計算屬性

public get computedMsg(){
      return "這里是計算屬性" + this.message;
 }
public set computedMsg(message:string){
 }

完整代碼案例

<template>
  <div>
    {{message}}
    <input type="button" value="點擊觸發父級方法" @click="bindSend"/>
    <input type="button" value="點擊觸發父級方法" @click="handleSend"/>
    <input type="button" value="點擊觸發父級方法" @click="bindSend2"/>
    <!-- <Hello></Hello> -->
  </div>
</template>
<script lang="ts">
import { Component, Prop, Vue, Watch, Emit } from "vue-property-decorator";
import Hello from "./HelloWorld.vue";
// 注明此類為一個vue組件
@Component({
  components: {
    Hello
  }
})
export default class Test extends Vue {
  // 原有data中的數據在這里展開編寫
 public message: string = "asd";
  //原有props中的數據展開編寫
  @Prop({
    type: Number,
    default: 1,
    required: false
  })
  propA?: number
  @Prop()
  propB:string
  //原有computed
  public get computedMsg(){
      return "這里是計算屬性" + this.message;
  }
  public set computedMsg(message:string){
  }
  //原有的watch屬性
  @Watch("propA",{
      deep:true
  })
  public test(newValue:string,oldValue:string){
      console.log("propA值改變了" + newValue);
  }
  // 以前需要給父級傳值的時候直接方法中使用emit就行了,當前需要通過emit來處理
  @Emit()
  private bindSend():string{
      return this.message
  }
  @Emit()
  private bindSend1(msg:string,love:string){
      // 如果不處理可以不寫下面的,會自動將參數回傳
    //   msg += "love";
    //   return msg;
  }
  //原有放在methods中的方法平鋪出來
  public handleSend():void {
      this.bindSend1(this.message,"love");
  }
  // 這里的emit中的參數是表明父級通過什么接受,類似以前的$emit("父級定義的方法")
  @Emit("test")
  private bindSend2(){
      return "這個可以用test接受";
  }
}
</script>

到此這篇關于Vue-cli3中使用TS語法示例代碼的文章就介紹到這了,更多相關Vue-cli3使用TS語法內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩国产精品久久久久久亚洲| 国产精久久久| 午夜久久av | 亚洲精品成人一区| 久久精品网址| av成人国产| 国产精品国产三级国产在线观看| 亚洲一区欧美激情| 国产日产高清欧美一区二区三区| 99精品视频在线观看免费播放| 欧美日韩1区2区3区| 激情婷婷亚洲| 精品久久99| 日韩美女国产精品| 天堂资源在线亚洲| 精品网站aaa| 亚洲人成网站在线在线观看| 久草免费在线视频| 青草综合视频| 国产日韩综合| 天堂√8在线中文| 国产欧美一区二区三区国产幕精品| 亚州av乱码久久精品蜜桃| 国产免费久久| 在线视频亚洲欧美中文| 欧洲一级精品| 你懂的网址国产 欧美| 蜜桃视频免费观看一区| 久久亚洲成人| 国产 日韩 欧美 综合 一区| 日韩精品中文字幕吗一区二区 | 日韩影院在线观看| 日本不良网站在线观看| 欧美日一区二区在线观看| 国产亚洲综合精品| 蜜桃视频在线网站| 老司机精品视频网| 蜜桃视频免费观看一区| 久久九九99| 日韩欧美激情电影| 国产精品三p一区二区| 97se亚洲| 亚洲国产日韩欧美在线| 国产精品yjizz视频网| 国产精品日本一区二区不卡视频 | 久久中文字幕导航| 日韩一区二区三区高清在线观看| 国产美女高潮在线| 精品美女视频| 国产精品a级| 日韩av中文在线观看| 免费人成在线不卡| 亚洲一区二区三区高清| 欧美91精品| 神马午夜久久| 美女av在线免费看| 国产精品不卡| 国产一区二区亚洲| 久久91视频| 麻豆国产精品| 国产高清日韩| 国产精品分类| 91精品国产自产观看在线 | 欧美有码在线| 日本在线成人| 都市激情国产精品| 日本免费一区二区三区四区| 日本一二区不卡| 成人高清一区| 久久影院午夜精品| 性感美女一区二区在线观看| 婷婷激情一区| 国产99久久久国产精品成人免费| 欧美国产偷国产精品三区| 国内不卡的一区二区三区中文字幕| 国产精品色在线网站| 欧美精品1区| 国产一区二区精品福利地址| 成人一区而且| 欧美日韩在线网站| 国产午夜精品一区二区三区欧美| 一区在线免费| 亚洲精品综合| 日本三级亚洲精品| 国产精品久久久久久久免费软件| 欧美激情在线精品一区二区三区| 久久香蕉网站| 不卡一二三区| 香蕉人人精品| 99国产精品99久久久久久粉嫩| 亚洲在线网站| 日韩av中文字幕一区| 麻豆精品视频在线观看免费| 日韩av自拍| 亚洲特色特黄| 国产精品视区| 日韩精品亚洲一区二区三区免费| 国产欧美在线| 日本久久综合| 午夜电影亚洲| 日韩欧美激情| 国产一区二区三区久久| 亚洲精品国产嫩草在线观看| 99久久亚洲精品蜜臀| 亚洲一区日本| 国产欧美一区二区三区国产幕精品 | 欧美交a欧美精品喷水| 国产精品伦理久久久久久| 久久亚洲专区| 中文字幕一区二区三区日韩精品| 中文国产一区| 国产欧美69| 美女精品一区| 国产精品亚洲综合色区韩国| 精品国产欧美日韩| 欧美 日韩 国产精品免费观看| 五月婷婷亚洲| 欧美中文一区| 久久久久午夜电影| 亚洲资源网站| 精品视频在线你懂得| 米奇777超碰欧美日韩亚洲| 综合激情在线| 麻豆久久久久久| 国产91一区| 91精品国产自产在线丝袜啪| 国产在线观看www| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美国产另类| 欧美一级专区| 国产精品毛片一区二区在线看| 亚洲欧美网站| 开心激情综合| 美日韩精品视频| 成人在线丰满少妇av| 一区二区亚洲视频| av中文资源在线资源免费观看| 三级在线观看一区二区| 成人国产精品久久| 亚洲欧洲美洲国产香蕉| 97精品中文字幕| 日本精品另类| se01亚洲视频 | 亚洲成人av观看| 亚洲精一区二区三区| 麻豆高清免费国产一区| 精品国产aⅴ| 91欧美日韩在线| 久久亚洲在线| 国产精品theporn| 99视频精品免费观看| 成人午夜亚洲| 91av一区| 丝袜国产日韩另类美女| 人在线成免费视频| 国产精品嫩草影院在线看| 国产亚洲在线| 久久精品动漫| 精品成人18| 欧美午夜三级| 欧美肉体xxxx裸体137大胆| 欧美激情日韩| 日韩和欧美的一区| 久久午夜精品| 蜜桃成人av| 日韩在线第七页| 国产精品tv| 日本久久一区| 不卡在线一区二区| 国产一区二区精品久| 国产欧美在线| 亚洲精品九九| 欧美一级专区| 婷婷中文字幕一区| 日韩免费福利视频| 国产精品分类| 久久精品97| 天堂久久一区| 视频在线观看一区| 欧美日韩高清| 久久蜜桃精品| 97精品视频在线看| 捆绑调教美女网站视频一区 | 精品国产麻豆| 国产精品免费99久久久| 日韩一区中文| 伊人久久一区| 影音先锋久久精品| 热久久久久久久| 91成人精品视频| 在线日韩一区| 欧美中文一区二区| 亚洲一级特黄| 亚洲大全视频| 久久一区二区三区电影| 四虎884aa成人精品最新| 吉吉日韩欧美| 国产99在线| 欧美日韩精品免费观看视欧美高清免费大片 | 亚洲午夜一级|