当前位置: 首页 > news >正文

vue3中选项式 api 、组合式 api能能否混用

可以。vue3 中既可以使用选项式 api 也可以使用组合式 api,也可以混用。

备注:实际开发中,建议根据项目需求选择一种主要 API 风格,混合使用仅作为过渡或特殊场景的解决方案。

这里讲混用的两种方案:

1、同一个 vue 文件中写两个 script,分别写选项式 api、组合式 api 两种不同风格。

两个  <script>  之间的数据访问规则:

(1)选项式 API(普通  <script>)访问组合式 API(<script setup>)

不能直接访问,需要通过  expose  显式暴露组合式中的数据 / 方法:

(2)组合式 API(<script setup>)访问选项式 API(普通  <script>)

通过getCurrentInstance 获取实例访问:

<template><div><!-- 可以同时使用两种 API 定义的数据 -->选项式数据:{{ optionsCount }}<br>组合式数据:{{ setupCount }}<br>组合式访问选项式:{{ setupReadOptions }}<br></div>
</template><!-- 1. 选项式 API:普通 script 标签 -->
<script>
export default {data() {return {optionsCount: 100 // 选项式定义的数据};},methods: {optionsMethod() {return this.optionsCount * 2;}},mounted() {// 通过 this.$expose 访问组合式暴露的内容console.log(this.$expose.setupCount.value); // 200console.log(this.$expose.setupMethod()); // 400}
};
</script><!-- 2. 组合式 API:<script setup> 标签 -->
<script setup>
import { ref, computed, getCurrentInstance } from 'vue';// 组合式定义的数据
const setupCount = ref(200);// 组合式中访问选项式 API 的数据/方法
const instance = getCurrentInstance(); // 获取组件实例// 访问选项式的 data
const setupReadOptions = computed(() => {// 注意:需通过实例的 data 属性访问return instance?.data.optionsCount + setupCount.value;
});// 访问选项式的 methods
console.log(instance?.proxy.optionsMethod()); // 输出 200(100*2)
</script>

2、同一个vue文件中一个script,setup中通过defineOptions定义选项式 API 的方法:

(1)通过 defineOptions 使用选项式 api,defineOptions使用方式和 vue2 一样,比如 data、methods、props、computed、watch 等等

(2)数据访问规则:

(2.1)组合式 API(<script setup>)访问选项式 API(普通  <script>)

setup 中可以访问 defineOptions 中数据,通过 getCurrentInstance()获取当前实例对象,然后通过实例对象获取 data 数据

(2.2)选项式 API(普通  <script>)访问组合式 API(<script setup>)

defineOptions 访问自己的数据通过 this 的方式,也可以访问 setup 中数据,使用直接访问的方式

   <template><button @click="increment">{{ count }}</button></template><script setup>import { ref } from "vue";import { getCurrentInstance } from "vue";const count = ref(0);// 定义选项式 API 的方法defineOptions({data() {return { internalCount: 0 };},methods: {increment() {this.count++; // 这里的 this 可以访问 ref 数据(自动解包)this.internalCount++;},},});// 获取组件实例(不推荐频繁使用)const instance = getCurrentInstance();// 在 <script setup> 中访问 defineOptions 内部的 data(需通过实例)console.log(instance?.data.internalCount); // 0</script>

http://www.dtcms.com/a/435610.html

相关文章:

  • 汕头企业网站建设价格如何建设网站使用
  • 做电影网站需要多打了服务器湖北省建设厅造价官方网站
  • 哪里有做装修网站网上家教网站开发
  • 电商推广费用占比汕头网站快速排名优化
  • PCB学习——STM32F103VET6电源部分
  • php网站空间支持seo软件系统
  • 深圳方维网站建设销售app软件大概需要多少钱
  • ICT 数字测试原理 5 - -VCL 简介
  • 哪个网站域名便宜dedecms 购物网站
  • 网站首页包含的内容怎么做5080电影电视剧大全
  • Product Hunt 每日热榜 | 2025-10-01
  • 一块钱购物网站帝国cms7.0网站地图
  • 爬虫 API 开发:从架构设计到电商风控突破的全维度实践
  • 动态手机网站怎么做的网络行业做什么挣钱
  • LeetCode 148.排序链表
  • 做美食网站的特点怎么添加网站权重
  • 服装软件管理系统是什么?主要有哪几种类型?
  • ⚡ WSL2 搭建 s5p6818 Linux 嵌入式开发平台(Part 2):系统构建与系统部署
  • 网站别人备案怎么办赚钱网
  • wordpress网站接入qqwordpress怎么修改导航栏
  • 中山网站建设文化机构电商网站怎么做的
  • 福州市 2025 国庆集训 Day2 前三题题解
  • Java中的优先队列PriorityQueue
  • 宁波网站关键词做网站赚钱还是做应用赚钱
  • 重庆网站推广营销h5页面制作工具 软件
  • AI让产品越来越用户中心化
  • 襄阳做淘宝网站推广建设银行个人登录网站
  • 网站建设思维1级a做爰免费网站
  • 网站设计报告总结淘客免费网站建设
  • 又一个 wordpress 站点php网站建设填空题