以下是一个使用Vue3和TypeScript编写的简单的TodoList应用程序,包含父子组件:

TodoList组件:

<template>
  <div>
    <h1>Todo List</h1>
    <input v-model="newTodo" placeholder="Add a new todo">
    <button @click="addTodo">Add</button>
    <ul>
      <todo-item v-for="(todo, index) in todos" :key="index" :todo="todo" @remove-todo="removeTodo"></todo-item>
    </ul>
  </div>
</template>

<script lang="ts">
import { defineComponent, ref } from 'vue'
import TodoItem from './TodoItem.vue'

export default defineComponent({
  name: 'TodoList',
  components: {
    TodoItem
  },
  setup() {
    const todos = ref<string[]>([])
    const newTodo = ref<string>('')

    const addTodo = () => {
      if (newTodo.value) {
        todos.value.push(newTodo.value)
        newTodo.value = ''
      }
    }

    const removeTodo = (todo: string) => {
      const index = todos.value.indexOf(todo)
      if (index !== -1) {
        todos.value.splice(index, 1)
      }
    }

    return {
      todos,
      newTodo,
      addTodo,
      removeTodo
    }
  }
})
</script>

TodoItem组件:

<template>
  <li>
    {{ todo }}
    <button @click="removeTodo">Remove</button>
  </li>
</template>

<script lang="ts">
import { defineComponent, PropType } from 'vue'

export default defineComponent({
  name: 'TodoItem',
  props: {
    todo: {
      type: String as PropType<string>,
      required: true
    }
  },
  emits: ['remove-todo'],
  setup(props, { emit }) {
    const removeTodo = () => {
      emit('remove-todo', props.todo)
    }

    return {
      removeTodo
    }
  }
})
</script>

使用:

<template>
  <TodoList />
</template>

<script lang="ts">
import { defineComponent } from 'vue'
import TodoList from './TodoList.vue'

export default defineComponent({
  name: 'App',
  components: {
    TodoList
  }
})
</script>
``
用ts写一个vue3 todolist 父子组件的简单案例

原文地址: http://www.cveoy.top/t/topic/humF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录