Vue3如何像在prototype(原型)上挂载数据

  1. 首先,由于Vue团队对原型链的封装和改进,Vue3无法像Vue2一样直接在原型上放置数据

下面是Vue2的做法:

javascript 复制代码
//Vue2的main.js:
import Vue from 'vue'

Vue.prototype.myName = '张三';
//通过在Vue.prototype上放了一个myName的属性,其他组件都可以使用this.myName获取到张三
  1. 在原型上挂载数据的作用是为了所有组件都可以通过 this. 获取到挂载的这个数据,

如果Vue3想要达到同样的效果,即(所有组件都可以通过this.myName获取到张三),需要用到vue3的mixin方法

javascript 复制代码
//Vue3的main.js
import { createApp } from 'vue'
import App from './App.vue'

//定义mixin
const myMixin = {
    created() {
        this.myName = '张三';
    }
};

const app = createApp(App);
//使用mixin
app.mixin(myMixin);

这样,在其他组件使用的时候就可以从app的实例获取到'张三',达到与在Vue.prototype上挂载数据同样的作用

  1. 任意组件中使用:

--组合式api

javascript 复制代码
//组合式api没有this,所以要用getCurrentInstance方法获取vue实例,上边挂载的数据就在实例中
<script setup>
import {getCurrentInstance} from "vue"
const v3This = getCurrentInstance()
console.log(v3This.ctx.myName);//张三
//挂载的数据被放在了getCurrentInstance函数返回结果的ctx上,
</script>

--选项式api

javascript 复制代码
//因vue3会兼容vue2的代码,所以也可以用vue2的选项式api的获取方式,直接从this上获取
<script>
export default {
    mounted(){
        console.log(this.myName)//张三
    }
}
</script>
相关推荐
UXbot5 小时前
UI设计工具推荐合集
前端·人工智能·ui
码路星河5 小时前
基于 Vue + VueUse 的 WebSocket 优雅封装:打造高可用的全局连接管理方案
javascript·vue.js·websocket
摘星编程5 小时前
React Native + OpenHarmony:Accelerometer计步器代码
javascript·react native·react.js
敲敲了个代码5 小时前
如何优化批量图片上传?队列机制+分片处理+断点续传三连击!(附源码)
前端·javascript·学习·职场和发展·node.js
@AfeiyuO5 小时前
Vue 引入全局样式scss
前端·vue·scss
光影少年5 小时前
flex布局和grid布局区别,实现两边固定布局中间自适应
前端·css3·web·ai编程
全栈测试笔记6 小时前
异步函数与异步生成器
linux·服务器·前端·数据库·python
EndingCoder6 小时前
配置 tsconfig.json:高级选项
linux·前端·ubuntu·typescript·json
木风小助理6 小时前
JavaStreamAPI的性能审视,优雅语法背后的隐形成本与优化实践
java·前端·数据库
Ophelia(秃头版7 小时前
JS事件循环与NodeJS事件循环(libuv)
开发语言·javascript