UI
一、components/ColumnList.vue
<template> <ul> <li v-for="column of list" :key="column.id"> <img :src="column.avatar" :alt="column.title"> <h5>{{column.title}}</h5> <p>{{column.description}}</p> <a href="#">进入专栏</a> </li> </ul></template><script lang="ts">import { defineComponent, PropType } from 'vue'export interface ColumnProps{ id:number, title:string, avatar:string, description:string}export default defineComponent({ name:'ColumnList', props:{ list:{ type:Array as PropType<ColumnProps[]>, required:true } }, setup(props){ console.log(props) }})</script>
二、App.vue中使用这个组件
<template> <column-list :list='list'></column-list></template><script lang='ts'>import { defineComponent } from 'vue'import 'bootstrap/dist/css/bootstrap.min.css'import ColumnList, { ColumnProps } from './components/ColumnList.vue'const testData:ColumnProps[] = [ { id:1001, title:'vue3.x', avatar:'https://images.dog.ceo/breeds/schipperke/n02104365_9354.jpg', description: '这是一只野狗', },];export default defineComponent({ name: 'App', components: { ColumnList, }, setup(){ return { list:testData } }})</script>
三、ColumnList设置可选参数avatar,及计算属性
<template> <div class="row"> <div class="col-4 " v-for="column of columnList" :key="column.id"> <div class="card h-100 shadow-sm text-center"> <img class="card-img-top rounded" :src="column.avatar" :alt="column.title" /> <div class="card-body"> <h5 class="card-title">{{ column.title }}</h5> <p class="card-text">{{ column.description }}</p> <a href="#" class="btn btn-primary border">进入专栏</a> </div> </div> </div> </div></template><script lang="ts">import { computed, defineComponent, PropType } from "vue";import "bootstrap/dist/css/bootstrap.min.css";export interface ColumnProps { id: number; title: string; avatar?: string; description: string;}export default defineComponent({ name: "ColumnList", props: { list: { type: Array as PropType<ColumnProps[]>, required: true, }, }, setup(props) { const columnList = computed(()=>{ return props.list.map(item=>{ if(!item.avatar){ item.avatar = require('@/assets/logo.png') } return item; }) }) return { columnList } },});</script>