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

TypeScript在vue中的使用解讀

 更新時(shí)間:2023年02月08日 09:47:04   作者:霞霞要乖  
這篇文章主要介紹了TypeScript在vue中的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

主要介紹 TypeScript 在 vue 中的使用,還有一些j注釋起來(lái)的 js 代碼做對(duì)照

參考鏈接:合成 API 的TypeScript

vue3中配合使用TS,還需要額外安裝一個(gè)vscode插件:Typescript Vue Plugin

Typescript Vue Plugin

1. 父?jìng)髯?defineProps

父組件中

<script setup lang="ts">
  import { ref } from 'vue';
  import MyComVue from './components/MyCom.vue';

  let money = ref(100)
</script>

<template>
  <div style="padding: 20px; margin: 20px; border: 1px solid red">
    <h1>父組件</h1>
    <p>傳給子組件:{{money}}</p>
    <MyComVue
      :money="money"
      car="特斯拉"
    />
    <MyComVue
      :money="money"
    />
  </div>
</template>

子組件中

<script setup lang="ts">
  // 1. js中
  // const props = defineProps({
  //   money:{
  //     type: Number,
  //     require: true
  //   },
  //   car: {
  //     type: String,
  //     required: true
  //   } 
  // })
  // 2. ts中
  // props可以通過(guò)解構(gòu)來(lái)指定默認(rèn)值,將指定默認(rèn)值的變量定義為可選參數(shù)
  const {money, car='GTR'} = defineProps<{
    money: number
    car?:string
  }>()
</script>

<template>
  <div style="padding: 20px; margin: 20px; border: 1px solid red">
    <h1>子組件</h1>
    <p>從父組件接收 {{money}} {{car}}</p>
  </div>
</template>

注:提供的默認(rèn)值需要在模板中渲染,需要額外添加配置

// vite.config.js文件中

export default defineConfig({
  plugins: [vue({
    reactivityTransform: true
  })]
})

父?jìng)髯? src=

2. 子傳父 defineEmits

父組件中

<script setup lang="ts">
  import { ref } from 'vue';
  import MyComVue from './components/MyCom.vue';

  let money = ref(100)
  const event1 = (val: number) => {
    console.log('event1',val);
    money.value = val
  }
  const changeCar = (val: string) => {
    console.log('changeCar',val);
  }
</script>

<template>
  <div style="padding: 20px; margin: 20px; border: 1px solid red">
    <h1>父組件</h1>
    <p>傳給子組件:{{money}}</p>
    <MyComVue
      :money="money"
      car="特斯拉"
      @change-car="changeCar"
    />
    <MyComVue
      :money="money"
      @event1="event1"
    />
  </div>
</template>

子組件中

<script setup lang="ts">
  // 使用ts的泛型指令props類型
  const {money, car='GTR'} = defineProps<{
    money: number
    car?:string
  }>()

  // js中-- const myEnit = defineEmits(['event1'])
  // ts中
  const myEmit = defineEmits<{
    (e:'event1', money:number):void
    (e:'changeCar', val:string):void
  }>()
  const hClick = () => {
    myEmit('event1', 200)
    myEmit('changeCar', 'BWM')
  }
</script>

<template>
  <div style="padding: 20px; margin: 20px; border: 1px solid red">
    <h1>子組件</h1>
    <p>從父組件接收 {{money}} {{car}}</p>
    <button @click="hClick">emit</button>
  </div>
</template>

computedr

3. ref和computed

<script setup lang="ts">
  import {computed, ref} from 'vue'

  // 1. ref<泛型>()
  // 簡(jiǎn)單類型可以省略,復(fù)雜類型推薦使用
  // const todos = ref([{id:1, content: 'sleep', isDone: true}])
  // ref<{id:Number,content: String,sDone: Boolean}[]>([])
  const todos = ref<{
    id:Number
    content: String
    isDone: Boolean
  }[]>([])

  setTimeout(()=>{
    todos.value = [
      {id:1, content: 'sleep', isDone: true},
      {id:2, content: 'work', isDone: false}
    ]
  },1000)

  // 2. 計(jì)算屬性: 已完成數(shù)量
  // 通過(guò)泛型可以指定computed計(jì)算屬性的類型,通常可以省略
  const leftCount = computed(() => {
    return todos.value.filter(item => item.isDone).length
  })
</script>

<template>
  <div>
    <ul>
      <li v-for="item in todos">{{item.content}} {{item.isDone}}</li>
    </ul>
    已完成: {{leftCount}}
  </div>
</template>

computed

4. 事件處理 ($event)

$event在vue中,他是一個(gè)特殊的變量名

  • 1. 寫在回調(diào)函數(shù)中
  • 2. 固定名字
  • 3. 表示當(dāng)前的事件對(duì)象
const move = (e: MouseEvent) => {
  mouse.value.x = e.pageX
  mouse.value.y = e.pageY
}

<-- 鼠標(biāo)懸停在 $event 上會(huì)提示類型為 MouseEvent -->
<h1 @mousemove="move($event)">根組件</h1>

5. Template Ref

<template>
  <div>
    <h1 ref="refH1">ref</h1>
    <!-- 點(diǎn)擊按鈕在控制臺(tái)打印 H1 的中的value值 -->
    <button @click="hClick">click</button>
  </div>
</template>

<script setup lang="ts">
  import { ref } from 'vue';

  const refH1 = ref<null | HTMLHeadElement>(null)
  const hClick = () => {
    console.log(refH1.value?.innerHTML);
  }
</script>

6. 可選鏈操作符

可選鏈操作符( ?. )允許讀取位于連接對(duì)象鏈深處的屬性的值,而不必明確驗(yàn)證鏈中的每個(gè)引用是否有效。

let nestedProp = obj.first?.second;
console.log(res.data?.data)
obj.fn?.()

if (obj.fn) {
    obj.fn()
}
obj.fn && obj.fn()

// 等價(jià)于
let temp = obj.first;
let nestedProp = ((temp === null || temp === undefined) ? undefined : temp.second);

7.非空斷言

如果我們明確的知道對(duì)象的屬性一定不會(huì)為空,那么可以使用非空斷言 !

// 告訴typescript, 明確的指定obj不可能為空
let nestedProp = obj!.second;

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺析vue深復(fù)制

    淺析vue深復(fù)制

    這篇文章主要介紹了vue深復(fù)制的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下
    2018-01-01
  • Vue3中#default=“scope”的使用

    Vue3中#default=“scope”的使用

    在Vue3中,我們經(jīng)常會(huì)遇到需要處理列表渲染的情況,Vue3引入了一種新的語(yǔ)法,即#default=“scope”,本文就來(lái)介紹一下Vue3中#default=“scope”的使用,感興趣的可以了解一下
    2023-10-10
  • vue2手機(jī)APP項(xiàng)目添加開(kāi)屏廣告或者閃屏廣告

    vue2手機(jī)APP項(xiàng)目添加開(kāi)屏廣告或者閃屏廣告

    這篇文章主要為大家詳細(xì)介紹了vue2手機(jī)APP項(xiàng)目添加開(kāi)屏廣告或者閃屏廣告的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Vue無(wú)法訪問(wèn).env.development定義的變量值問(wèn)題及解決

    Vue無(wú)法訪問(wèn).env.development定義的變量值問(wèn)題及解決

    這篇文章主要介紹了Vue無(wú)法訪問(wèn).env.development定義的變量值問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue中Mixin的正確用法詳解

    Vue中Mixin的正確用法詳解

    眾所周知,vue 的 mixins 是個(gè)非常靈活,但又很容易帶來(lái)混亂的 API,Mixins 本該是一種強(qiáng)大的重用代碼的手段,但使用之后往往帶來(lái)更多的混亂,代碼變得不易維護(hù),本文就詳細(xì)介紹Vue Mixin的正確用法,需要的朋友可以參考下
    2023-06-06
  • vue3中使用viewerjs實(shí)現(xiàn)圖片預(yù)覽效果的項(xiàng)目實(shí)踐

    vue3中使用viewerjs實(shí)現(xiàn)圖片預(yù)覽效果的項(xiàng)目實(shí)踐

    viewer.js是一款開(kāi)源的圖片預(yù)覽插件,功能十分強(qiáng)大,本文主要介紹了vue3中使用viewerjs實(shí)現(xiàn)圖片預(yù)覽效果的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09
  • vue3?+?Ant?Design?實(shí)現(xiàn)雙表頭表格的效果(橫向表頭+縱向表頭)

    vue3?+?Ant?Design?實(shí)現(xiàn)雙表頭表格的效果(橫向表頭+縱向表頭)

    這篇文章主要介紹了vue3?+?Ant?Design?實(shí)現(xiàn)雙表頭表格(橫向表頭+縱向表頭),需要的朋友可以參考下
    2023-12-12
  • vue組件引用另一個(gè)組件出現(xiàn)組件不顯示的問(wèn)題及解決

    vue組件引用另一個(gè)組件出現(xiàn)組件不顯示的問(wèn)題及解決

    這篇文章主要介紹了vue組件引用另一個(gè)組件出現(xiàn)組件不顯示的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 多個(gè)vue子路由文件自動(dòng)化合并的方法

    多個(gè)vue子路由文件自動(dòng)化合并的方法

    這篇文章主要給大家介紹了關(guān)于多個(gè)vue子路由文件自動(dòng)化合并的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • vue 點(diǎn)擊按鈕增加一行的方法

    vue 點(diǎn)擊按鈕增加一行的方法

    今天小編就為大家分享一篇vue 點(diǎn)擊按鈕增加一行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09

最新評(píng)論

儋州市| 蒲城县| 汨罗市| 肇州县| 石门县| 四会市| 清河县| 米林县| 香格里拉县| 三江| 响水县| 泗阳县| 克东县| 公主岭市| 永嘉县| 沽源县| 高安市| 深水埗区| 城固县| 浮梁县| 山阳县| 定南县| 汉中市| 望谟县| 渭南市| 万宁市| 安顺市| 桦南县| 滕州市| 博爱县| 修文县| 富民县| 始兴县| 三穗县| 扬中市| 桑日县| 拉萨市| 昔阳县| 顺义区| 格尔木市| 靖安县|