vue3中如何使用ts
如何使用ts
在創建vue腳手架的時候吧typescript選上
app.vue
<template> <!-- <div id="nav"> <router-link to="/">Home</router-link> | <router-link to="/about">About</router-link> </div> <router-view/> --> <div id="root"> <div className="todo-container"> <div className="todo-wrap"> <Header :addtodo="addtodo"/> <List :todos="state.todos" /> <Footer /> </div> </div> </div> </template>
<script lang="ts"> import { defineComponent, reactive } from "vue"; import Footer from "./components/footer/footer.vue"; import Header from "./components/header/header.vue"; import List from "./components/list/list.vue"; //導入接口類型 import {todo} from "./type/todo" export default defineComponent({ components: { List, Header, Footer }, setup() { const state = reactive({ todos: [ { id: 1, title: "吃飯", isture: true }, { id: 2, title: "睡覺", isture: false }, { id: 3, title: "打遊戲", isture: false }, { id: 4, title: "打代碼", isture: true }, ], }); //定義一個方法用來接收輸入框裡面傳來的數據並把它加到state.todos裡面面 const addtodo=(todo:todo)=>{ state.todos.unshift(todo) } return { state, addtodo }; }, }); </script>
<style> @import "./App.css"; </style>
header.vue
<template> <div class="todo-header"> <input type="text" placeholder="請輸入你的任務名稱,按回車鍵確認" v-model="title" @keyup.enter="add" /> </div> </template>
<style scoped> @import "./header.css"; </style>
<script lang="ts"> import { defineComponent, ref } from "vue"; //導入接口類型 import { todo } from "../../type/todo"; export default defineComponent({ props: { addtodo: { type: Function, required: true, }, }, setup(props) { const title = ref(""); const add = () => { if (title.value == "") { alert("請輸入內容"); } const todo: todo = { id: Date.now(), title: title.value, isture: false, }; props.addtodo(todo); title.value='' }; return { add, title, }; }, }); </script>
list.vue
<template> <ul className="todo-main"> <Listitem v-for="(todos,index) in todos" :key="todos.id" :todos='todos'></Listitem> </ul> </template>
<style scoped> @import"./list.css"; </style>
<script lang="ts"> import Listitem from "./listitem/listitem.vue" import { defineComponent } from 'vue' export default defineComponent({ components:{ Listitem }, props:{ todos:Object } , setup() { }, }) </script>
listitem.vue
<template> <li class="itli" > <label> <input type="checkbox" v-model="todos.isture" /> <span>{{todos.title}}</span> </label> <button class="btn btn-danger" >刪除</button> </li> </template>
<style scoped> @import "./listitem.css"; </style>
<script lang="ts"> import { defineComponent } from "vue"; //導入接口類型 import {todo} from "../../../type/todo" export default defineComponent({ setup() {}, props:{ //定義todos的類型是自己定義的todo接口 todos:Object as ()=>todo } }); </script>
footer.vue
<template> <div class="todo-footer"> <label> <input type="checkbox" /> </label> <span > <span >已完 </span> / 全部 </span> <button class="btn btn-danger" >清除已完成任務</button> </div> </template>
<style scoped> /* @import"./footer.css"; */ </style>
<script lang="ts"> import { defineComponent } from 'vue' export default defineComponent({ setup() { }, }) </script>
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 如何理解Vue簡單狀態管理之store模式
- Vue之TodoList案例詳解
- vue3實現一個todo-list
- vue3中$attrs的變化與inheritAttrs的使用詳解
- 一篇文章帶你瞭解Vue組件的創建和使用