news 2026/5/28 5:15:46

vue3的ts页面初始化模板代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vue3的ts页面初始化模板代码

vue3的ts页面初始化模板代码

在 Vue 3 中使用 TypeScript 开发时,主要有两种编写页面的方式。以下是两种风格的模板代码,你可以根据项目需求选择使用。

📝 两种页面初始化模板

1. 标准 Composition API 写法

这种写法使用defineComponent和明确的setup函数,结构清晰,适合初学者和需要明确控制暴露内容的情况。

<template><divclass="page-container"><h1>{{pageTitle}}</h1><p>计数器:{{count}}</p><button @click="increment">增加</button><button @click="reset">重置</button></div></template><script lang="ts">import{defineComponent,ref}from'vue';exportdefaultdefineComponent({name:'MyPage',setup(){// 响应式数据constpageTitle=ref<string>('Vue 3 + TypeScript 页面');constcount=ref<number>(0);// 方法constincrement=():void=>{count.value++;};constreset=():void=>{count.value=0;};// 生命周期钩子constinitialize=():void=>{console.log('页面初始化完成');};// 返回模板中需要使用的数据和方法return{pageTitle,count,increment,reset,initialize};},mounted(){this.initialize();}});</script><style scoped>.page-container{padding:20px;max-width:800px;margin:0auto;}</style>

2.<script setup>语法糖写法(推荐)

这种写法更简洁,不需要显式返回数据,适合 Vue 3.2+ 版本,是目前的主流写法。

<template><divclass="page-container"><h1>{{pageTitle}}</h1><p>计数器:{{count}}</p><p>双倍计数:{{doubleCount}}</p><button @click="increment">增加</button><button @click="reset">重置</button></div></template><script setup lang="ts">import{ref,computed,onMounted}from'vue';// 响应式数据constpageTitle=ref<string>('Vue 3 + TypeScript 页面');constcount=ref<number>(0);// 计算属性constdoubleCount=computed(():number=>count.value*2);// 方法constincrement=():void=>{count.value++;};constreset=():void=>{count.value=0;};// 生命周期钩子onMounted(():void=>{console.log('页面初始化完成');initialize();});constinitialize=():void=>{// 初始化逻辑console.log('初始化页面数据');};</script><style scoped>.page-container{padding:20px;max-width:800px;margin:0auto;}button{margin:05px;padding:8px16px;cursor:pointer;}</style>

🔧 高级功能扩展模板

如果需要更复杂的功能,可以参考以下包含路由、状态管理和API调用的完整模板:

<template><divclass="advanced-page"><header><h1>{{pageTitle}}</h1><nav><router-link to="/home">首页</router-link><router-link to="/about">关于</router-link></nav></header><main><div v-if="loading"class="loading">加载中...</div><div v-else><slot name="content"><p>用户数据:{{userData}}</p><button @click="fetchData":disabled="loading">{{loading?'加载中...':'获取数据'}}</button></slot></div></main></div></template><script setup lang="ts">import{ref,computed,onMounted}from'vue';import{useRouter}from'vue-router';// 类型定义interfaceUser{id:number;name:string;email:string;}interfacePageProps{title?:string;}// Props 定义constprops=withDefaults(defineProps<PageProps>(),{title:'默认页面标题'});// 响应式数据constpageTitle=ref<string>(props.title);constloading=ref<boolean>(false);constuserData=ref<User|null>(null);// 计算属性consthasUserData=computed(():boolean=>userData.value!==null);// 方法constfetchData=async():Promise<void>=>{loading.value=true;try{// 模拟 API 调用constresponse=awaitfetch('/api/user');userData.value=awaitresponse.json();}catch(error){console.error('获取数据失败:',error);}finally{loading.value=false;}};// 生命周期onMounted(async():Promise<void>=>{awaitfetchData();});// 暴露给父组件的方法defineExpose({fetchData,resetData:()=>{userData.value=null;}});</script><style scoped>.advanced-page{min-height:100vh;background-color:#f5f5f5;}header{background:#fff;padding:1rem;box-shadow:02px4pxrgba(0,0,0,0.1);}.loading{text-align:center;padding:2rem;color:#666;}button:disabled{opacity:0.6;cursor:not-allowed;}</style>

💡 关键要点说明

  1. 类型安全:TypeScript 提供了完整的类型支持,减少运行时错误 。
  2. 响应式系统:使用refreactive创建响应式数据 。
  3. 组合式函数:可以将逻辑抽离为可复用的组合式函数 。
  4. 生命周期:使用onMountedonUpdated等组合式 API 替代选项式 API 。

🎯 使用建议

  • 简单页面:推荐使用<script setup>语法糖,代码更简洁。
  • 复杂组件:如果需要明确的控制和组织结构,可以使用标准写法。
  • 团队项目:统一代码风格,制定 TypeScript 规范。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 2:16:29

USB转串口驱动安装新手教程:从下载到配置全流程

从零搞定USB转串口通信&#xff1a;CH340与CP2102驱动安装全解析 你有没有遇到过这样的场景&#xff1f;手里的开发板插上电脑后&#xff0c;设备管理器里只显示“未知设备”&#xff0c;串口助手打不开COM口&#xff0c;调试信息出不来——明明线都接对了&#xff0c;却卡在第…

作者头像 李华
网站建设 2026/5/27 4:46:42

基于Python+大数据+SSM新能源汽车数据分析系统(源码+LW+调试文档+讲解等)/新能源车数据平台/电动汽车数据分析/新能源车辆数据系统/新能源汽车数据研究/新能源车辆信息分析系统

博主介绍 &#x1f497;博主介绍&#xff1a;✌全栈领域优质创作者&#xff0c;专注于Java、小程序、Python技术领域和计算机毕业项目实战✌&#x1f497; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅&#x1f447;&#x1f3fb; 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2026/5/27 13:55:20

LangFlow养生食谱个性化推荐引擎

LangFlow养生食谱个性化推荐引擎 在健康管理日益智能化的今天&#xff0c;用户不再满足于千篇一律的饮食建议。他们希望获得真正“懂自己”的营养指导——比如根据体质、节气甚至情绪状态&#xff0c;推荐一道温补又不燥热的汤品。然而&#xff0c;构建这样一套融合中医理论与大…

作者头像 李华
网站建设 2026/5/28 0:20:18

ESP32 IDF Wi-Fi连接+HTTP请求完整示例

从零开始&#xff1a;用 ESP-IDF 实现 ESP32 的 Wi-Fi 联网与 HTTP 数据交互 你有没有遇到过这样的场景&#xff1f;手头有一块 ESP32&#xff0c;想让它把传感器数据上传到云端 API&#xff0c;却发现连最基本的“连上 Wi-Fi 发个 HTTP 请求”都卡住了——不是连不上网络&…

作者头像 李华
网站建设 2026/5/25 22:22:33

【API 设计之道】08 流量与配额:构建基于 Redis 的分布式限流器

大家好&#xff0c;我是Tony Bai。欢迎来到我们的专栏 《API 设计之道&#xff1a;从设计模式到 Gin 工程化实现》的第八讲。在上一讲中&#xff0c;我们给 API 穿上了“防弹衣”&#xff0c;通过幂等性设计防止了重复请求的数据污染。今天&#xff0c;我们要给 API 装上“红绿…

作者头像 李华
网站建设 2026/5/27 18:13:23

LangFlow灯谜创作助手实现过程

LangFlow灯谜创作助手实现过程 在人工智能加速渗透创意领域的今天&#xff0c;一个有趣的问题浮现出来&#xff1a;我们能否让大模型不仅“会答题”&#xff0c;还能“出题”&#xff1f;比如&#xff0c;让它像古人一样&#xff0c;为“中秋赏月”拟一则意境悠远的灯谜&#x…

作者头像 李华