Vue.prototype 详解及使用
前言:
我们可能会在很多组件里用到数据/实用工具,但是不想污染全局作用域。这种情况下,可以通过在原型上定义它们使其在每个 Vue 的实例中可用。
1. 基本示例
在main.js中添加一个变量到 Vue.prototype
Vue.prototype.$appName = 'My App'
这样 $appName 就在所有的 Vue 实例中可用了,甚至在实例被创建之前就可以
beforeCreate: function () {console.log(this.$appName)}
控制台会打印出 My App
2. 为实例prototype设置作用域
为什么 appName 要以 $ 开头?
$ 是在 Vue 所有实例中都可用的 property 的一个简单约定。这样做会避免和已被定义的数据、方法、计算属性产生冲突。
如果我们设置:
Vue.prototype.appName = 'My App'
export default {data(){return{appName:'组件实例中的appName'}},beforeCreate: function () {console.log(this.appName)},created: function () {console.log(this.appName)},
}
</script>
日志中会先出现 “My App”,然后出现 “组件实例中的appName”,因为 this.appName 在实例被创建之后被 data 覆写了。我们通过 $ 为实例 property 设置作用域来避免这种事情发生。
3. 注册和使用全局变量
每个组件都是一个vue实例,Vue.prototype加一个变量,只是给每个组件加了一个属性,这个属性的值并不具有全局性。
比如以下例子:
Vue.prototype.$appName = 'main'
给所有组件注册了一个属性 $appName,赋予初始值 'main' ,所有组件都可以用 this.$appName 访问此变量;
如果组件中没有赋值,初始值都是'main'
app.vue
<template><div id="app">主组件name-》{{this.$appName}}<p>{{newName}}</p><button @click="changeName">更改name</button><button @click="$router.push('/cs')">跳转</button><hr><router-view></router-view></div>
</template><script>
export default {data(){return{newName:''}},methods:{changeName(){this.$appName = "changeName"this.newName=this.$appName}}
}
</script>
ce.vue
<template><div class="ce">跳转页面name-》{{this.$appName}}</div>
</template>
在app.vue中点击更改name,$appName值已发生改变,但cs.vue页面的值没有发生变化

如果要实现全局变量的功能,需要把属性变为引用类型
Vue.prototype.$appName = { name: 'main' }
使用 this.$appName.name 改变和引用相应的值
app.vue
<template><div id="app">主组件name-》{{this.$appName.name}}<p>{{newName}}</p><button @click="changeName">更改name</button><button @click="$router.push('/cs')">跳转</button><hr><router-view></router-view></div>
</template><script>
export default {data(){return{newName:''}},methods:{changeName(){this.$appName.name = "changeName"this.newName=this.$appName.name}}
}
</script>
cs.vue
<template><div class="ce">跳转页面name-》{{this.$appName.name}}</div>
</template>

在app.vue中点击更改name,$appName值已发生改变,cs.vue页面的值也发生了变化
4. 原型方法的上下文
在 JavaScript 中一个原型的方法会获得该实例的上下文,也就是说可以使用 this 访问:数据、计算属性、方法或其它任何定义在实例上的东西。
让我们将其用在一个名为 $reverseText 的方法上:
// main.js
Vue.prototype.$reverseText = function (propertyName) {this[propertyName] = this[propertyName].split('').reverse().join('')
}
<script>
export default {data() {return{message: 'Hello'}},created() {console.log(this.message) // => "Hello"this.$reverseText('message')console.log(this.message) // => "olleH"}
}
</script>

5. 应用示例
引入bus
const bus = new Vue()
Vue.prototype.$bus = bus
this.$bus.$emit("fun",'A组件传来的值')
axios…
6.Vue.prototype中的api
Vue.prototype是Vue.js框架中一个重要的原型对象,通过它可以在全局范围内定义和共享Vue实例方法、指令、过滤器等。在Vue.prototype对象上定义的属性和方法,会被挂载到所有Vue实例的原型链上,从而可以在组件中通过this访问。
一些常见的Vue.prototype中的API包括:
$emit(eventName[, ...args]):触发当前实例上的事件。可以通过该方法向父组件或同级组件传递数据。
$on(eventName, callback):监听当前实例上的事件。可以通过该方法在组件间传递数据。
$nextTick(callback):在下次 DOM 更新循环结束之后执行延迟回调。常用于更新后立即操作 DOM。
$watch(exprOrFn, callback[, options]):监听一个表达式或计算属性的变化,并在回调函数中处理变化。
$set(target, key, value):在一个已有的响应式对象上添加一个属性,并确保这个新属性同样是响应式的,可以通过该方法解决对象添加新属性时无法响应式更新的问题。
$delete(target, key):删除一个对象的属性,可以通过该方法解决对象删除属性时无法响应式更新的问题。
$refs:一个对象,持有所有注册过 ref 的子组件。
$el:当前组件的根 DOM 元素。
$options:当前实例的初始化选项对象,包括组件的各种选项。
我们可以解析某个api源码
7.$nextTick源码
$nextTick是Vue.js框架中一个常用的异步更新方法,用于在下一次DOM更新循环结束后执行回调函数。其源码如下:
Vue.prototype.$nextTick = function(fn) {return nextTick(fn, this)
}// _nextTickId存储下一个tick的id号
let _nextTickId = 0
// _callbacks存储回调函数
let _callbacks = []
// _pending存储是否正在执行
let _pending = false// nextTick函数
function nextTick(fn, ctx) {let id, callbackcallback = () => {// 如果传入了fn,则执行回调函数if (fn) {try {fn.call(ctx)} catch (e) {handleError(e, ctx, 'nextTick')}} else if (callback) {callback.id = null// 如果没有传入fn,但存在回调函数,则从_callbacks中移除该回调函数let index = _callbacks.indexOf(callback)if (index > -1) {_callbacks.splice(index, 1)}}}// 每次nextTick都会将该回调函数推入_callbacks中,等待执行_callbacks.push(callback)if (!_pending) {_pending = true// 使用微任务将回调函数异步执行if (typeof Promise !== 'undefined') {id = Promise.resolve().then(flushCallbacks)} else if (typeof MutationObserver !== 'undefined') {let observer = new MutationObserver(flushCallbacks)let textNode = document.createTextNode(String(_nextTickId))observer.observe(textNode, {characterData: true})id = () => {textNode.data = String(++_nextTickId)}} else if (typeof setImmediate !== 'undefined') {id = setImmediate(flushCallbacks)} else {id = setTimeout(flushCallbacks, 0)}}// 返回id,方便使用者手动取消nextTickif (!fn && typeof Promise !== 'undefined') {return id}
}// flushCallbacks函数,用于执行_callbacks中的所有回调函数
function flushCallbacks() {_pending = falseconst copies = _callbacks.slice(0)_callbacks.length = 0for (let i = 0; i < copies.length; i++) {copies[i]()}
}
$nextTick方法首先将回调函数推入_callbacks数组中,并使用一个_pending变量记录是否有回调函数正在执行。
如果_pending为false,则说明当前没有回调函数正在执行,需要异步执行flushCallbacks函数,从而依次执行_callbacks数组中的所有回调函数。在异步执行时,$nextTick方法会优先使用Promise的微任务方式执行回调函数,如果浏览器不支持Promise,则会尝试使用MutationObserver、setImmediate和setTimeout等方式执行。
当传入的回调函数为空时,$nextTick方法会返回一个id,方便使用者手动取消nextTick。
需要注意的是,$nextTick方法只会在组件实例的更新周期内生效,如果需要在Vue.js框架初始化后立即执行回调函数,可以使用Vue.nextTick()全局方法。
相关文章:
Vue.prototype 详解及使用
前言: 我们可能会在很多组件里用到数据/实用工具,但是不想污染全局作用域。这种情况下,可以通过在原型上定义它们使其在每个 Vue 的实例中可用。 1. 基本示例 在main.js中添加一个变量到 Vue.prototype Vue.prototype.$appName My App这…...
音视频八股文(3)--ffmpeg常见命令(2)
07-ffplay命令播放媒体 播放本地文件 播放本地 MP4 视频文件 test.mp4 的命令,从第 2 秒位置开始播放,播放时长为 10 秒,并且在窗口标题中显示 “test time”: ffplay -window_title "test time" -ss 2 -t 10 -autoe…...
使用bert4keras出现的问题(Process finished with exit code -1073741819 (0xC0000005))
1、环境 python 3.7.12 tensorflow 1.15 keras 2.3.1 bert4keras 0.9.7 protobuf 3.19.0 numpy 1.16.5 2、出现问题 numpy版本不兼容问题所以你就直接按照我的版本就可以了(numpy 1.16.5) Process finished with exit code -1073741819 (0xC0000005) …...
python协程实战
协程简介 协程(Coroutine)又称微线程、纤程,协程不是进程或线程,其执行过程类似于 Python 函数调用,Python 的 asyncio 模块实现的异步IO编程框架中,协程是对使用 async 关键字定义的异步函数的调用; 一个进程包含多个线程,类似…...
【论文笔记】VideoGPT: Video Generation using VQ-VAE and Transformers
论文标题:VideoGPT: Video Generation using VQ-VAE and Transformers 论文代码:https://wilson1yan. github.io/videogpt/index.html. 论文链接:https://arxiv.org/abs/2104.10157 发表时间: 2021年9月 Abstract 作者提出了…...
scala之基础面向对象
scala 既是面向对象 也是函数式编程 从Java 发展而来,依赖JVM环境 一、 scala 在linux中运行 scala 模式中直接编写运行 scala文件,load执行 scala编译程序 编译 运行 scala java 二、scala 数据类型 基础数据类型 val 不可变变量 函数式编程 …...
Qt5.12实战之多线程编程概念
1.为什么要使用多线程? a. 基于线程,同时处理多个任务,软件响应更灵敏 b.充分利用CPU的多核心功能增加应用运行效率 c.多线程在同一进程间使用共享通信更加高效 d.多个线程之间进行切换比多个进程之间进行切换,线程开销更少. 2.操作系统与进程关系 a. MS-DOS系统 属于单进程…...
格式化数据恢复怎么做?超实用的3种方法在这!
案例:格式化数据怎么恢复 【我的电脑前段时间中病毒了,无奈之下我只能将其格式化,但是很多重要的文件和图片之类的也一起被删除了,有什么方法可以恢复这些格式化的数据吗?非常着急!】 格式化数据恢复&…...
【Java|golang】1105. 填充书架---动态规划
给定一个数组 books ,其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth 。 按顺序 将这些书摆放到总宽度为 shelfWidth 的书架上。 先选几本书放在书架上(它们的厚度之和小于等于书架的宽度 shelfWidt…...
linux基础命令
linux基础命令 一、linux命令 熟悉账务linux命令对运维的好处是巨大的,只有熟悉了命令咱们在运维的操作上才能如鱼得水。 系统信息 arch #显示机器的处理器架构(1) uname -m #显示机器的处理器架构(2) uname -r #显示正在使用的内核版本 dmidecode -q …...
【三十天精通Vue 3】 第十八天 Vue 3的国际化详解
✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 国际化概述1.1 国际化的概念1.2 国际化的作用1.3 V…...
02 - 学会提问
学会提问 一、引言 1.1 GPT简介 GPT(Generative Pre-trained Transformer)是一种基于Transformer架构的大型预训练语言模型。 凭借其强大的文本生成、理解和处理能力,GPT已在诸如自然语言处理、机器翻译、文本摘要等多个领域取得了显著的…...
Java经典的Main方法面试题
mian方法是做什么用的? main方法是Java程序的入口方法,JVM在运行的时候会首先查找main方法不用main方法如何运行一个类? 不行,没有main方法我们不能运行Java类 在Java7之前,你可以通过使用静态初始化运行Java类。但是&…...
世界大学电子电气工程TOP10,国内大学哪家强?
EE究竟是什么专业 ? 在中国,工程系中跟电相关的专业,一般都切分得非常细。有电子工程、电气工程、通信工程、信息工程、自动化、测控仪器等。但在国外,一般把这些领域都归类到 Electrical Engineering 中,也就是我们常说的EE。 …...
5.3 牛顿-科茨公式
学习目标: 理解微积分基础知识,例如导数和微分的概念。学习牛顿-科茨公式的推导过程。这个公式实际上是使用泰勒公式对被积函数进行展开,并使用微积分的基本原理进行简化得到的。学习如何使用牛顿-科茨公式进行数值积分。这通常涉及到将被积…...
全注解下的SpringIoc 续2-bean的生命周期
spring中bean的生命周期 上一个小节梳理了一下Spring Boot的依赖注入的基本知识,今天来梳理一下spring中bean的生命周期。 下面,让我们一起看看bean在IOC容器中是怎么被创建和销毁的。 bean的生命周期大致分为四个部分: #mermaid-svg-GFXNEU…...
【VQ-VAE代码实战】Neural Discrete Representation Learning
【VQ-VAE代码实战】Neural Discrete Representation Learning 0、前言1、简介2、Basic IdeaLoss3、代码Load DataVector Quantizer LayerEncoder & Decoder ArchitectureTrainPlot LossView ReconstructionsView EmbeddingReference0、前言 论文地址:基于神经网络的,离散…...
gpt3.5和gpt4区别-gpt3.5和gpt4
gpt系列 GPT系列是OpenAI公司开发的一组基于人工智能深度学习技术的自然语言处理模型。GPT代表Generative Pre-trained Transformer,即预训练生成模型。目前,GPT模型已经推出了三代(GPT-1,GPT-2,GPT-3)&am…...
java获取当前系统时间
在Java中,可以使用以下几种方法获取当前系统时间: 方法1:使用java.util.Date类 java import java.util.Date; public class Main { public static void main(String[] args) { Date date new Date(); System.out.println("当前时间&…...
pbootcms自动配图出图插件
pbootcms文章无图自动出图配图插件的优点 1、提高文章的可读性和吸引力:插入图片可以丰富文章的内容和形式,增强读者的阅读体验和吸引力,提高文章的点击率和转化率。 2、节省时间和精力:手动添加图片需要花费大量时间和精力去寻找…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
