最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章帶你使用Typescript封裝一個Vue組件(簡單易懂)

 更新時間:2020年06月05日 10:54:58   作者:Vam的金豆之路  
這篇文章主要介紹了使用Typescript封裝一個Vue組件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、搭建項目以及初始化配置

vue create ts_vue_btn

這里使用了vue CLI3自定義選擇的服務(wù),我選擇了ts、stylus等工具。然后創(chuàng)建完項目之后,進(jìn)入項目。使用快捷命令code .進(jìn)入Vs code編輯器(如果沒有code .,需要將編輯器的bin文件目錄地址放到環(huán)境變量的path中)。然后,我進(jìn)入編輯器之后,進(jìn)入設(shè)置工作區(qū),隨便設(shè)置一個參數(shù),這里比如推薦設(shè)置字號,點下。這里是為了生成.vscode文件夾,里面有個json文件。

我們在開發(fā)項目的時候,項目文件夾內(nèi)的文件很多,會有時影響視覺。那么這個文件就是設(shè)置什么文件隱藏,注意只是隱藏,而不是刪除!下面是我自己寫的,在Vue cli3生成的項目需要隱藏的文件參數(shù)。

{
  "files.exclude": {
    "**/.git": true,
    "**/.svn": true,
    "**/.hg": true,
    "**/CVS": true,
    "**/.DS_Store": true,
    "**/README.md": true,
    "**/node_modules":true,
    "**/shims-tsx.d.ts": true,
    "**/shims-vue.d.ts": true,
    "**/.browserslistrc": true,
    ".eslintrc.js": true,
    "babel.config.js": true,
    "package-lock.json": true,
    ".gitignore": true,
    "tsconfig.json": true
  }
}

以下就是所看到的文件目錄,我把一些無關(guān)緊要的文件跟文件夾隱藏或者刪除后所看到的。


文件解讀(從上往下):

文件夾或文件 包含子文件夾或文件 含義
.vscode settings.json 隱藏文件設(shè)置
public index.html、favicon.ico 靜態(tài)文件存放處
src components文件夾(存放組件)、App.vue、Home.vue、main.js 項目主要文件夾
package.json 項目依賴參數(shù)等

二、開發(fā)實踐

下圖為所需要創(chuàng)建的項目文件目錄,這里我們開發(fā)一個Vue按鈕組件。


如下圖所示,這就是我們要用Typescript開發(fā)的組件。

開始編輯:

1、App.vue

<template>
 <div id="app">
  <Home></Home> 
 </div>
</template>

<script lang="ts">
import { Component, Vue } from 'vue-property-decorator';// 編寫類樣式組件所需要的一些類或者是裝飾器
import Home from "@/Home.vue"; // 引入頁面組件

// 這里我們需要使用Component裝飾器,這個裝飾器是注冊組件用的,里面的參數(shù)是一個對象,內(nèi)有一個components屬性,值為引入的組件名
@Component({
 components:{
  Home
 }
})
export default class App extends Vue {}
</script>

<style lang="stylus">

</style>

2、UIBtn.vue

<template>
 <!-- v-on="$listeners" 可以使用,在本類不再監(jiān)聽,在其他地方監(jiān)聽,可以不用$emit(),但是我們這里不用它 -->
 <button
  class="ui-btn"
  @click="onBtnclick('success!')"
  :class="{
  'ui-btn-xsmall':xsmall,
  'ui-btn-small':small,
  'ui-btn-large':large,
  'ui-btn-xlarge':xlarge
 }"
 >
  <slot>Button</slot>
 </button>
</template>

<script lang="ts">
import { Component, Vue, Emit, Prop } from "vue-property-decorator"; // 編寫類樣式組件所需要的一些類或者是裝飾器
@Component
export default class UIBtn extends Vue {
 @Prop(Boolean) private xsmall: boolean | undefined;
 @Prop(Boolean) private small: boolean | undefined;
 @Prop(Boolean) private large: boolean | undefined;
 @Prop(Boolean) private xlarge: boolean | undefined;
 // eslint-disable-next-line @typescript-eslint/no-empty-function
 @Emit("click") private emitclick(x: string) {}
 private mounted() {
  console.log(this.large);
 }
 private onBtnclick(x: string) {
  this.emitclick(x);
 }
}
</script>

<style scoped lang="stylus" >
resize(a, b, c) 
 padding a b 
 font-size c
.ui-btn 
 resize(12px, 20px, 14px)
 border 0 solid #000
 border-radius 4px
 outline none
 font-weight 500;
 letter-spacing 0.09em
 background-color #409eff
 color #fff
 cursor pointer
 user-select none
 &:hover
  filter brightness(120%)
 &:active
  filter brightness(80%)
 &.ui-btn-xsmall 
  resize(5px, 15px, 14px)
 &.ui-btn-small 
  resize(8px, 18px, 14px)
 &.ui-btn-large 
  resize(14px, 22px, 14px)
 &.ui-btn-xlarge 
  resize(16px, 24px, 14px)
</style>

3、Home.vue

<template>
 <div class="home-con">
   <div class="btn-group">
      <UIBtn class="btn" @click="resize('xsmall')">超小</UIBtn>
      <UIBtn class="btn" @click="resize('small')">小</UIBtn>
      <UIBtn class="btn" @click="resize('normal')">正常</UIBtn>
      <UIBtn class="btn" @click="resize('large')">大</UIBtn>
      <UIBtn class="btn" @click="resize('xlarge')">超大</UIBtn>
   </div>
   <div class="btn-con">
      <UIBtn @click='onClick' 
      :xlarge="xlarge"
      :large="large"
      :small="small"
      :xsmall="xsmall"
      >主要按鈕</UIBtn>
   </div>
   <div class="btn-pro">
      <UIBtn large >樣式按鈕</UIBtn>
   </div>  
 </div>
</template>

<script lang="ts">
import { Component, Vue } from 'vue-property-decorator'; // 編寫類樣式組件所需要的一些類或者是裝飾器
import UIBtn from '@/components/UIBtn.vue';
@Component({
  components:{
   UIBtn
  }
})
export default class Home extends Vue {
  // eslint-disable-next-line @typescript-eslint/no-inferrable-types
  private xlarge: boolean = false;
  // eslint-disable-next-line @typescript-eslint/no-inferrable-types
  private large: boolean = false;
  // eslint-disable-next-line @typescript-eslint/no-inferrable-types
  private xsmall: boolean = false;
  // eslint-disable-next-line @typescript-eslint/no-inferrable-types
  private small: boolean = false;
  private resize (name: string){
    console.log(name)
    switch (name) {
      case 'xsmall':
        this.xsmall=true;
        this.small=false;
        this.large=false;
        this.xlarge=false;
        break;
      case 'small':
        this.xsmall=false;
        this.small=true;
        this.large=false;
        this.xlarge=false;
        break;
      case 'normal':
        this.xsmall=false;
        this.small=false;
        this.large=false;
        this.xlarge=false;
        break;
      case 'large':
        this.xsmall=false;
        this.small=false;
        this.large=true;
        this.xlarge=false;
        break;
      case 'xlarge':
        this.xsmall=false;
        this.small=false;
        this.large=false;
        this.xlarge=true;
        break;
    }
  }
  private onClick(x: string) {
    console.log(x)
  }
}
</script>

<style lang="stylus" scoped>
.btn-group
  margin 50px 0
.btn
  margin 6px
.btn-pro
  margin-top 50px 
</style>

到此這篇關(guān)于一篇文章帶你使用Typescript封裝一個Vue組件的文章就介紹到這了,更多相關(guān)Typescript封裝Vue組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue3+vite創(chuàng)建項目方式

    Vue3+vite創(chuàng)建項目方式

    本文介紹了如何使用Vite創(chuàng)建Vue項目,包括版本升級、命令變化以及配置vue-router、Vuex和AntDesignVue的方法,同時,也提供了降級Vue?CLI以兼容Vue2項目的步驟
    2024-12-12
  • Vue.js基礎(chǔ)指令實例講解(各種數(shù)據(jù)綁定、表單渲染大總結(jié))

    Vue.js基礎(chǔ)指令實例講解(各種數(shù)據(jù)綁定、表單渲染大總結(jié))

    這篇文章主要為大家詳細(xì)介紹了Vue.js基礎(chǔ)指令實例,各種數(shù)據(jù)綁定、表單渲染大總結(jié),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • vue3的defineExpose宏函數(shù)是如何暴露方法給父組件使用

    vue3的defineExpose宏函數(shù)是如何暴露方法給父組件使用

    當(dāng)子組件使用setup后,父組件就不能像vue2那樣直接就可以訪問子組件內(nèi)的屬性和方法,這個時候就需要在子組件內(nèi)使用defineExpose宏函數(shù)來指定想要暴露出去的屬性和方法,本文介紹vue3的defineExpose宏函數(shù)是如何暴露方法給父組件使用,需要的朋友可以參考下
    2024-05-05
  • Vue和React有哪些區(qū)別

    Vue和React有哪些區(qū)別

    這篇文章主要介紹了Vue和React有哪些區(qū)別,幫助大家更好的理解和學(xué)習(xí)JavaScript框架,感興趣的朋友可以了解下
    2020-09-09
  • Vue.js中的圖片引用路徑的方式

    Vue.js中的圖片引用路徑的方式

    當(dāng)我們在Vue.js項目中引用圖片時,關(guān)于圖片路徑有以下幾種情形,下面通過本文給大家分享Vue.js中的圖片引用路徑的方式,感興趣的朋友一起看看吧
    2017-07-07
  • vue 擴(kuò)展現(xiàn)有組件的操作

    vue 擴(kuò)展現(xiàn)有組件的操作

    這篇文章主要介紹了vue 擴(kuò)展現(xiàn)有組件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 一文詳解vue3項目實戰(zhàn)中的接口調(diào)用

    一文詳解vue3項目實戰(zhàn)中的接口調(diào)用

    在企業(yè)開發(fā)過程中,往往有著明確的前后端的分工,前端負(fù)責(zé)接收、使用接口,后端負(fù)責(zé)編寫、處理接口,下面這篇文章主要給大家介紹了關(guān)于vue3項目實戰(zhàn)中的接口調(diào)用的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • vuejs在解析時出現(xiàn)閃爍的原因及防止閃爍的方法

    vuejs在解析時出現(xiàn)閃爍的原因及防止閃爍的方法

    這篇文章主要介紹了vuejs在解析時出現(xiàn)閃爍的原因及防止閃爍的方法,本文介紹的非常詳細(xì),具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • Vue3中keep-alive的使用及注意事項說明

    Vue3中keep-alive的使用及注意事項說明

    這篇文章主要介紹了Vue3中keep-alive的使用及注意事項說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • vue 父組件獲取子組件里面的data數(shù)據(jù)(實現(xiàn)步驟)

    vue 父組件獲取子組件里面的data數(shù)據(jù)(實現(xiàn)步驟)

    在Vue中,父組件可以通過`ref`引用子組件,并通過`$refs`屬性來訪問子組件的數(shù)據(jù),下面分步驟給大家介紹vue 父組件獲取子組件里面的data數(shù)據(jù),感興趣的朋友一起看看吧
    2024-06-06

最新評論

建平县| 天全县| 荆门市| 灵宝市| 佛冈县| 金山区| 崇仁县| 兖州市| 扶余县| 福安市| 长垣县| 彭阳县| 南平市| 嘉定区| 休宁县| 通化市| 河津市| 交城县| 乐东| 离岛区| 峨边| 丽江市| 城市| 榕江县| 惠水县| 枣阳市| 红原县| 奉新县| 北川| 桃园市| 灵寿县| 革吉县| 辰溪县| 永城市| 青阳县| 元江| 威信县| 绥中县| 蓬安县| 塔河县| 阳春市|