Composition API

Composition API 将是 Vue 3 的核心功能,它具有许多更改和性能改进。

我们也可以在 Vue 2 中通过 npm 插件@vue/composition-api 使用它。

安装 yarn add @vue/composition-api 之后,在入口文件 main.js 中使用它。

import Vue from 'vue'
import VueCompositionAPI from '@vue/composition-api' Vue.use(VueCompositionAPI)

之后,你就可以在你vue2项目中用vue3的组合式API来编写组件了!

<template>
<button @click="increase">count is: {{ count }}</button>
</template>
<script>
export default {
setup() {
let count = 0
const increase = () => count++
return { count, increase }
},
}
</script>

script setup

<script setup>语法糖可以使得组合式API编写更为简洁。

这里我们通过unplugin-vue2-script-setup 让vue2在使用@vue/composition-api的基础上也能使用上此特性!

安装 yarn install --dev unplugin-vue2-script-setup,之后在vue.config.js中进行配置

const ScriptSetup = require('unplugin-vue2-script-setup/webpack').default

module.exports = {
parallel: false, // disable thread-loader, which is not compactible with this plugin
configureWebpack: {
plugins: [
ScriptSetup({ /* options */ }),
],
},
}

可否在script上直接设置name=“xxxx”吗?

<script setup>语法可以表达大多数现有 Options API 选项的等效功能,但以下几个选项除外:name、inheritAttrs、自定配置项目,但是您可以这么做

<script>
export default {
name: 'CustomName',
inheritAttrs: false,
customOptions: {}
}
</script> <script setup>
// script setup logic
</script>

路由和vuex等

Vue2 Helpers 能让你在vue2中也能使用到更先进的api,比如 useRouter

import { useRouter } from 'vue2-helpers/vue-router';

const router = useRouter();
router.push('/login');

访问全局属性

通常情况下,我们是通过 this.$xx访问,如 this.$store 或者 ui框架挂全局的方法 this.$confirm( )

但是组合式API显然没有this,可因为是vue2 全局内容有不得不以this访问,可以这样

<script setup>
import Vue from "vue"; const _this = Vue.prototype;
_this
.$confirm("确认关闭?")
.then((_) => {})
.catch((_) => {});
}; // 或者
// import { getCurrentInstance } from "@vue/composition-api";
// const _this = getCurrentInstance();
// console.log(_this);
</script>

父子通信

父组件访问子组件属性

<template>
<div class="app">
<helloword ref="helloword" />
<el-button type="primary" @click="test()">测试</el-button>
</div>
</template>
<script setup>
import { ref } from "@vue/composition-api";
import helloword from "./helloword.vue"; const helloword = ref(null);
const test = () => {
helloword.value.submit();
};
</script>
<template>
<div class="helloword">
子组件
</div>
</template>
<script setup>
import { defineExpose } from "@vue/composition-api"; const submit = () => {
alert(123);
}
defineExpose({
submit,
});
</script>

vue2使用vue3语法的更多相关文章

  1. vue2升级vue3指南(二)—— 语法warning&error篇

    本文总结了vue2升级vue3可能会遇到的语法警告和错误,如果想知道怎样升级,可以查看我的上一篇文章:vue2升级vue3指南(一)-- 环境准备和构建篇 Warning 1.deep /deep/和 ...

  2. Vue3语法快速入门以及写一个倒计时组件

    Vue3写一个倒计时组件 vue3 beta版本发布已有一段时间了,文档也大概看了一下,不过对于学一门技术,最好的方法还是实战,于是找了一个比较简单的组件用vue3来实现,参考的是vant的count ...

  3. Vue2和Vue3技术整理1 - 入门篇 - 更新完毕

    Vue2 0.前言 首先说明:要直接上手简单得很,看官网熟悉大概有哪些东西.怎么用的,然后简单练一下就可以做出程序来了,最多两天,无论Vue2还是Vue3,就都完全可以了,Vue3就是比Vue2多了一 ...

  4. 盘点Vue2和Vue3的10种组件通信方式(值得收藏)

    Vue中组件通信方式有很多,其中Vue2和Vue3实现起来也会有很多差异:本文将通过选项式API 组合式API以及setup三种不同实现方式全面介绍Vue2和Vue3的组件通信方式.其中将要实现的通信 ...

  5. Vue2 到 Vue3,重温这 5 个常用的 API

    距离Vue3发布已经过去一年多时间了,从Vue2到Vue3是一个不小的升级,包括周边生态等.虽然目前大多数开发者们在使用的仍旧以Vue2为准,但Vue3显然是Vue开发者们未来必须面对的,而且前不久V ...

  6. vue2升级vue3:vue2 vue-i18n 升级到vue3搭配VueI18n v9

    项目从vue2 升级vue3,VueI18n需要做适当的调整.主要是Vue I18n v8.x 到Vue I18n v9 or later 的变化,其中初始化: 具体可以参看:https://vue- ...

  7. vue2和vue3生命周期的区别

    概念 首先,我们了解一下"生命周期"这个词.通俗的来说,生命周期就是一个事务从出生到消失的过程.例如,一个人从出生到去世.在vue中,vue的生命周期是指,从创建vue对象到销毁v ...

  8. vue2升级vue3:Vue Demij打通vue2与vue3壁垒,构建通用组件

    如果你的vue2代码之前是使用vue-class-component 类组件模式写的.选择可以使用 https://github.com/facing-dev/vue-facing-decorator ...

  9. vue2和vue3的区别?

    vue2和vue3的主要区别在于以下几点: 1.生命周期函数钩子不同 2.数据双向绑定原理不同 3.定义变量和方法不同 4.指令和插槽的使用不同 5.API类型不同 6.是否支持碎片 7.父子组件之间 ...

  10. vue3语法糖+ts组件传值

    在开发中有些功能是通用的,而且逻辑大致相同,像这种东西可以封成一个组件,比较常用的就是函数封装,组件封装,组件封装是需要引入到页面使用的,所以通常它会有一些自己的方法,父子组件可以通过一些值来进行关联 ...

随机推荐

  1. 不同数据库Oracle、PostgreSQL、Vertical、Mysql常用操作

    不同数据库Oracle.PostgreSQL.Vertical.Mysql常用操作 授权语句用于管理数据库用户的权限,常见的授权语句如下: 1.授权用户对表的SELECT权限 GRANT SELECT ...

  2. PIKACHU之暴力破解

    PIKACHU之暴力破解 基于表单的暴力破解 进入靶场后是一个简易的登录界面 随便输入用户名与密码观察回显 由于回显是模糊回显,并没有表示是用户名错误还是密码错误,直接进入BP采用暴力破解,但是在进行 ...

  3. 里程碑:MCP星球作为国内首个中文MCP社区和MCP工具平台,突破7000个MCP服务!

    随着人工智能技术的快速发展,越来越多的开发者开始使用模型上下文协议(Model Context Protocol,简称MCP)来优化大模型与外部工具的交互.作为首个最大的中文MCP工具市场,MCP星球 ...

  4. liunx git 免密码登录

    vscode远程git或在linux环境使用git时,每次clone都要输入帐号密码,很不方便,可以使用下面一行命令,系统会记录你输入的下一次帐号密码.(明文记录,注意规避风险)   # 执行   g ...

  5. 基于Cherry Studio + DeepSeek 搭建本地私有知识库!

    在当今数字化时代,知识管理变得越来越重要.无论是个人还是企业,都希望能够高效地存储.管理和检索知识.而借助 AI 技术,我们可以实现更加智能的知识库系统.本文将详细介绍如何使用 Cherry Stud ...

  6. MySQL 高可用集群搭建部署

    MySQL 高可用集群搭建(GTID 模式 + 自动故障转移) 一.环境规划 角色 IP 地址 说明 主库 (Master) 192.168.1.100 运行 MySQL + Keepalived/M ...

  7. js--弹出对话框、改变控件内容、验证输入邮箱的合法性

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  8. 【记录】Python3|Selenium4 极速上手入门(Windows)

    环境:Windows 版本:python3,selenium 4.11.2 写这个是方便自己重装电脑时重新装 Selenium,懒得每次都重新找链接. 文章目录 1 装 Chrome Edge 其他浏 ...

  9. 自己搭建一个https的dns,让不同的浏览器使用不同的DNS,使用相同的域名访问到不同的主机上

    我有一个web项目,使用域名访问,需要同时运行线上环境和测试环境,为了防止一些css.js缓存影响,在不同的浏览器里分别访问线上环境和测试环境,比如Chrome浏览器访问测试环境,而Safari浏览器 ...

  10. QJson出现“\n“变成“\\n“

    在使用QJson的时候出现了字符串有\n的情况,在QJson转换为QByteArray的时候,\n变成了\n的情况,可以通过这样解决 int index = -1; do { index = qByt ...