vue在页面使用Vue.prototype全局变量

在这里插入图片描述

文章目录

    • Vue.prototype 的基本概念
      • 使用 Vue.prototype 添加全局属性和方法
        • 添加全局属性
        • 添加全局方法
      • 使用场景
      • 注意事项
      • 在模板中使用全局变量和方法
        • 方法1
        • 方法2
        • 方法3


Vue.prototype 的基本概念

Vue.prototype 是 Vue 实例的原型对象。在 JavaScript 中,每个构造函数都有一个 prototype 属性,这个属性是一个指向原型对象的指针。原型对象包含可以由特定类型的所有实例共享的属性和方法。在 Vue 中,通过修改 Vue.prototype,我们可以为所有的 Vue 实例添加全局的属性和方法。

使用 Vue.prototype 添加全局属性和方法

添加全局属性

你可以通过 Vue.prototype 添加任何类型的全局属性,比如字符串、数字、对象等。这些属性在所有 Vue 组件的实例中都可以通过 this 关键字来访问。

// 在 main.js 或其他入口文件中  
Vue.prototype.$appName = 'My App';

然后,在任何 Vue 组件中,你都可以使用 this.$appName 来访问这个全局属性。

添加全局方法

同样地,你可以通过 Vue.prototype 添加全局方法。这些方法可以在任何 Vue 组件中通过 this 调用。

// 在 main.js 或其他入口文件中  
Vue.prototype.$sayHello = function(name) {  
  console.log(`Hello, ${name}!`);  
};

在组件中,你可以这样使用这个方法:

export default {  
  mounted() {  
    this.$sayHello('Vue.js');  
  }  
}

使用场景

组件间共享逻辑:有时,一些逻辑需要在多个组件中使用。通过在 Vue.prototype 上定义方法,可以避免在每个组件中重复编写相同的逻辑,提高了代码的可维护性和可读性。

全局函数:当需要在整个应用程序中执行某些通用的任务时,可以在 Vue.prototype 上定义方法。这样,你可以在任何需要的地方调用这些方法,而无需为每个 Vue 实例创建单独的函数。

插件机制:通过在 Vue.prototype 上定义方法,可以创建插件系统。插件可以定义自己的方法,并在需要时被其他 Vue 实例使用。

注意事项

避免命名冲突:通常,全局变量和方法的名字以 $ 开头,这是 Vue 的一个约定,以避免与组件的 data、props、computed 等属性产生冲突。

避免污染全局原型:在定义方法时,应确保只在当前文件或模块范围内共享这些方法,以避免污染全局原型。过多的全局方法可能会导致代码难以理解和维护。

在模板中使用全局变量和方法

方法1

在 Vue 的模板中,你可以直接使用通过 Vue.prototype 添加的全局变量和方法。由于它们被添加到了 Vue 的原型链上,所以每个 Vue 实例都可以访问它们。

<template>  
  <div>  
    <p>{{ $appName }}</p>  
    <button @click="$sayHello('World')">Click Me</button>  
  </div>  
</template>

在上面的模板中,$appName 是通过 Vue.prototype 添加的全局属性,而 $sayHello 是全局方法。它们都可以直接在模板中使用。

方法2

以下是如何使用 Vue.prototype 来添加一个全局变量的示例:

// 在你的主入口文件(比如 main.js)中  
import Vue from 'vue';  
import App from './App.vue';  
  
// 定义全局变量  
Vue.prototype.$globalTcType = '初始值';  
  
// 或者,如果你有一个对象并且想要暴露它的方法  
const globalTcType = {  
  $tcType: '初始值',  
  get() {  
    return this.$tcType;  
  },  
  set(value) {  
    this.$tcType = value;  
    console.log(111111111, value);  
  }  
};  
  
// 将全局对象添加到 Vue.prototype 上  
Vue.prototype.$globalTcType = globalTcType;  
  
// 创建和挂载根实例  
new Vue({  
  render: h => h(App),  
}).$mount('#app');

在上面的代码中,我们定义了一个名为 $globalTcType 的全局变量,并将其添加到 Vue.prototype 上。这意味着在 Vue 的任何组件中,你都可以通过 this.$globalTcType 来访问这个全局变量。

现在,在 Vue 组件模板中可以这样使用:

<template>  
  <div>  
    <!-- 假设你有一个方法来获取 globalTcType 的值 -->  
    <p>{{ getGlobalTcTypeValue() }}</p>  
      
    <!-- 或者如果你只是想要显示它的值 -->  
    <p>{{ $globalTcType.$tcType }}</p>  
  </div>  
</template>  
  
<script>  
export default {  
  methods: {  
    getGlobalTcTypeValue() {  
      return this.$globalTcType.get(); // 调用全局对象的 getter 方法  
    }  
  }  
}  
</script>

在上面的模板中,$globalTcType 是通过 Vue.prototype 添加的全局变量。你可以在模板中直接使用它,或者通过组件的方法间接使用它。

请注意,使用 Vue.prototype 添加全局变量时,变量名最好以 $ 开头,以便与组件的 data、props、computed 等属性区分开来,避免潜在的命名冲突。

同时,请确保不要在全局变量上添加任何可能会与 Vue 实例的内置属性或方法相冲突的名称。这样可以避免任何潜在的错误或混淆。

方法3

在 Vue 的模板中,你可以直接访问在 Vue 实例或组件的 data、computed 或 methods 中定义的属性或方法。然而,由于 globalTcType 在你提供的代码片段中似乎是一个对象,包含 get 和 set 方法,它并不是一个简单的数据属性。因此,你不能直接在模板中通过 {{ globalTcType }} 来获取它的值,因为模板不会识别这种形式的 getter。

可以通过几种方式来解决这个问题:

在 data 中定义一个响应式属性来存储 globalTcType 的值:
你可以在 Vue 组件的 data 函数中定义一个属性,然后在 created 或 mounted 钩子中使用 globalTcType 的 get 方法来初始化它。之后,你可以在模板中直接访问这个属性。

export default {  
  data() {  
    return {  
      tcTypeValue: null // 初始化这个属性来存储 globalTcType 的值  
    };  
  },  
  created() {  
    this.tcTypeValue = this.globalTcType; // 使用 getter 获取值  
  },  
  computed: {  
    // 定义一个计算属性来访问 globalTcType 的值  
    globalTcType: {  
      get() {  
        return this.$tcType; // 假设 $tcType 是在某个地方定义的全局变量  
      },  
      set(value) {  
        this.$tcType = value;  
        console.log(111111111, value);  
      }  
    }  
  }  
};

在模板中:

<template>  
  <div>{{ tcTypeValue }}</div>  
</template>

使用计算属性来访问 globalTcType 的值:
你可以定义一个计算属性,该属性使用 globalTcType 的 get 方法来获取值。这样,每当 globalTcType 的值变化时,计算属性也会自动更新。

computed: {  
  tcTypeComputed() {  
    return this.globalTcType; // 这里假设 globalTcType 的 get 方法会返回正确的值  
  }  
}

在模板中:

<template>  
  <div>{{ tcTypeComputed }}</div>  
</template>

直接在模板中使用方法调用:
虽然这不是一个推荐的做法,因为方法调用在模板中可能会导致不必要的性能开销,但你可以通过定义一个方法来返回 globalTcType 的值,并在模板中调用这个方法。

methods: {  
  getTcTypeValue() {  
    return this.globalTcType; // 调用 getter 方法  
  }  
}

在模板中:

<template>  
  <div>{{ getTcTypeValue() }}</div>  
</template>

请注意,this.$tcType 看起来像是在某个地方定义的全局变量或组件实例的一个属性。确保 this.$tcType 在你的组件的上下文中是可用的,否则你需要检查它的定义和来源。如果 $tcType 是在 Vuex store 或其他全局状态管理系统中定义的,你可能需要使用不同的方式来访问它。

您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/477848.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java】Java程序员必备的一些流程图

一、spring的生命周期 Spring作为当前Java最流行、最强大的轻量级容器框架&#xff0c;了解熟悉spring的生命周期非常有必要&#xff1b; 首先容器启动后&#xff0c;对bean进行初始化按照bean的定义&#xff0c;注入属性检测该对象是否实现了xxxAware接口&#xff0c;并将相…

openlayers 入门教程(四):layers 篇

还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#xff0c;webgl&#xff0c;ech…

20240316-2-协同过滤(collaborative filtering)

协同过滤(collaborative filtering) 直观解释 协同过滤是推荐算法中最常用的算法之一&#xff0c;它根据user与item的交互&#xff0c;发现item之间的相关性&#xff0c;或者发现user之间的相关性&#xff0c;进行推荐。比如你有位朋友看电影的爱好跟你类似&#xff0c;然后最…

轻松找回丢失数据EasyRecovery数据恢复软件让你无后顾之忧

轻松找回丢失数据&#xff0c;EasyRecovery数据恢复软件让你无后顾之忧&#xff0c;电脑数码行业必备工具&#xff0c;让你的数据安全有保障 &#xff01; 一、EasyRecovery数据恢复软件简介 在我们的日常生活中&#xff0c;无论是工作还是学习&#xff0c;都离不开电脑和数据…

26 OpenCV 查找边缘

文章目录 findContours 发现边缘drawContours 绘制边缘大致流程示例 findContours 发现边缘 cv::findContours( InputOutputArray binImg, // 输入图像&#xff0c;非0的像素被看成1,0的像素值保持不变&#xff0c;8-bitOutputArrayOfArrays contours,// 全部发现的轮廓对象…

Mac玩《幻兽帕鲁》为什么打不开D3DMetal?d3d错误怎么办 d3dxl error

我之前发了一篇讲Mac电脑玩Steam热门新游《幻兽帕鲁》的文章&#xff08;没看过的点这里&#xff09;&#xff0c;后来也看到很多朋友去尝试了&#xff0c;遇到了一些问题&#xff0c;无法进入《幻兽帕鲁》游戏&#xff0c;或者是玩的时候卡顿以及出现黑屏&#xff0c;通过我的…

Altium Designer中如何修改默认字体

Altium Designer软件安装后&#xff0c;原理图和PCB设计中的文本通常默认是Times New Roman。这是一种Windows系统安全字体&#xff0c;在很早之前的Windows系统中就已经默认安装了这个字体。这种字体对打印也比较友好&#xff0c;是一种很常见的印刷体。 但是这种字体对于习惯…

[Leetcode]930.和相同的二元子数组+992.K个不同整数的子数组 关键词:[子数组][滑窗]

文章目录 Leetcode 992方法一&#xff1a;滑窗右端每次1&#xff0c;左端来回滑动方法二&#xff1a;&#xff08;最多K种的子串数&#xff09; - &#xff08;最多K-1种的子串数&#xff09; 恰好K种 Leetcode 930方法一&#xff1a;&#xff08;最多和为goal的子串数&#x…

移动app测试的好处简析,有必要选择第三方软件测试机构吗?

移动app测试是指对移动应用程序进行全面、系统和深入的检查和验证&#xff0c;以确保其功能、性能和稳定性达到预期要求。在移动应用市场日益竞争激烈的今天&#xff0c;进行移动app测试是至关重要的。 一、移动app测试的好处&#xff1a;   1、具有确保应用质量的作用。通过…

Linux 在线yum安装: PostgreSQL 15.6数据库

Linux 在线yum安装&#xff1a; PostgreSQL 15.6数据库 1、PostgreSQL数据库简介2、在线安装PostgreSQL15.63、配置 PostgreSQL的环境变量4、使用默认用户登录PostgreSQL5、配置 PostgreSQL 允许远程登录6、修改 PostgreSQL 默认端口7、创建数据库和表、远程用户zyl8、pgAdmin远…

基于Java的APK检测管理系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 开放平台模块2.3 软件档案模块2.4 软件检测模块2.5 软件举报模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 开放平台表3.2.2 软件档案表3.2.3 软件检测表3.2.4 软件举报表 四、系统展示五、核心代…

机器学习-06-无监督算法-02-层次聚类和密度聚类DBSCAN算法

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中无监督算法&#xff0c;包括层次和密度聚类等。 参考 DBSACN在线动态演示 本门课程的目标 完成一个特定行业的算法应用全过程&#xff1a; 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算…

摸鱼小技巧来啦,速来围观

一、前言 在日常测试中&#xff0c;很多小伙伴还是选择使用usb连接设备的方式去进行跑测&#xff0c;当需要连接多台设备就没办法在电脑上插入这么多设备&#xff0c;只能选择使用无线连接的方式去进行连接测试。你们快来get这份详细的无线连接设备教程吧~ 二、远程连接Andro…

demo版多人聊天系统

目录 ​编辑 一&#xff0c;引入 二&#xff0c;在Server端修改的代码 1&#xff0c;保存用户信息功能实现 2&#xff0c;拼接消息 3&#xff0c;广播消息 三&#xff0c; Client端要修改的代码 四&#xff0c;效果演示 一&#xff0c;引入 在上一篇文章udp网络服务器中&a…

LLM+Embedding构建问答系统的局限性及优化方案

LangChain LLM 方案的局限性&#xff1a;LLM意图识别准确性较低&#xff0c;交互链路长导致时间开销大&#xff1b;Embedding 不适合多词条聚合匹配等。 背景 在探索如何利用大型语言模型&#xff08;LLM&#xff09;构建知识问答系统的过程中&#xff0c;我们确定了两个核心…

飞跃前端瓶颈:技术进阶指南精华篇

引言&#xff1a; 在互联网的快车道上&#xff0c;前端技术日新月异。对于前端工程师而言&#xff0c;技术水平达到一定高度后&#xff0c;往往会遭遇成长的天花板。本文将探讨如何识别并突破这些技术瓶颈&#xff0c;分享实用的进阶策略和实践案例。 一、技术等级概览&#xf…

python知识点总结(七)

python知识点总结七 1、堆和栈的区别2、如何在局部修改全局的变量a、计算结果b、计算结果 3、如何修改一个enclosing变量4、关于值传递还是地址传值5、布尔类型6、逻辑运算7、字符串切片操作8、取整、取余、除数9、变量赋值10、字符串与数字相乘11、整型、浮点型、字符型之间相…

【LVGL-特殊符号】

LVGL-特殊符号 ■ LVGL-特殊符号 ■ LVGL-特殊符号 /* 直接调用 */ lv_label_set_text(my_label, LV_SYMBOL_OK); /* 与字符一起用 */ lv_label_set_text(my_label, LV_SYMBOL_OK "Apply"); /* 多个符号一起用 */ lv_label_set_text(my_label, LV_SYMBOL_OK LV_SYMBO…

智过网:一级建造师必须两年考过吗?有效期多久?

在建筑行业&#xff0c;一级建造师的职业资格证书是众多从业者追求的目标。然而&#xff0c;获得这一证书并非易事&#xff0c;它要求考生不仅具备扎实的专业知识&#xff0c;还需要在限定的时间内完成所有科目的考试。那么&#xff0c;一级建造师是否必须在两年内考完所有科目…