在vue项目中 实现定义全局变量 全局函数操作


Posted in Javascript onOctober 26, 2020

写在前面:

如题,在项目中,经常有些函数和变量是需要复用,比如说网站服务器地址,从后台拿到的:用户的登录token,用户的地址信息等,这时候就需要设置一波全局变量和全局函数,这两个设置不太难,而且有一些共通之处,可能有一些朋友对此不太了解,所以随便写出来分享一波。

定义全局变量

原理:

设置一个专用的的全局变量模块文件,模块里面定义一些变量初始状态,用export default 暴露出去,在main.js里面使用Vue.prototype挂载到vue实例上面或者在其它地方需要使用时,引入该模块便可。

全局变量模块文件:

Global.vue文件:

<script>
const serverSrc='www.baidu.com';
const token='12345678';
const hasEnter=false;
const userSite="中国钓鱼岛";
 export default
 {
 userSite,//用户地址
 token,//用户token身份
 serverSrc,//服务器地址
 hasEnter,//用户登录状态
 }
</script>

使用方式1:

在需要的地方引用进全局变量模块文件,然后通过文件里面的变量名字获取全局变量参数值。

在text1.vue组件中使用:

<template>
 <div>{{ token }}</div>
</template>

<script>
import global_ from '../../components/Global'//引用模块进来
export default {
 name: 'text',
data () {
 return {
   token:global_.token,//将全局变量赋值到data里面,也可以直接使用global_.token
  }
 }
}
</script>
<style lang="scss" scoped>

</style>

使用方式2:

在程序入口的main.js文件里面,将上面那个Global.vue文件挂载到Vue.prototype。

import global_ from './components/Global'//引用文件 Vue.prototype.GLOBAL = global_//挂载到Vue实例上面

接着在整个项目中不需要再通过引用Global.vue模块文件,直接通过this就可以直接访问Global文件里面定义的全局变量。

text2.vue:

<template>
 <div>{{ token }}</div>
</template>

<script>
export default {
 name: 'text',
data () {
 return {
   token:this.GLOBAL.token,//直接通过this访问全局变量。
  }
 }
}
</script>
<style lang="scss" scoped>
</style>

Vuex也可以设置全局变量:

通过vuex来存放全局变量,这里东西比较多,也相对复杂一些,有兴趣的小伙伴们,可自行查阅资料,折腾一波、

定义全局函数

原理

新建一个模块文件,然后在main.js里面通过Vue.prototype将函数挂载到Vue实例上面,通过this.函数名,来运行函数。

1. 在main.js里面直接写函数

简单的函数可以直接在main.js里面直接写

Vue.prototype.changeData = function (){//changeData是函数名
 alert('执行成功');
}

组件中调用:

this.changeData();//直接通过this运行函数

2. 写一个模块文件,挂载到main.js上面。

base.js文件,文件位置可以放在跟main.js同一级,方便引用

exports.install = function (Vue, options) {
 Vue.prototype.text1 = function (){//全局函数1
 alert('执行成功1');
 };
 Vue.prototype.text2 = function (){//全局函数2
 alert('执行成功2');
 };
};

main.js入口文件:

import base from './base'//引用 Vue.use(base);//将全局函数当做插件来进行注册

组件里面调用:

this.text1();

this.text2();

后话

上面就是如何定义全局变量 全局函数的内容了,这里的全局变量全局函数可以不局限于vue项目,vue-cli是用了webpack做模块化,其他模块化开发,定义全局变量、函数的套路基本上是差不多。上文只是对全局变量,全局函数的希望看完本文能给大家一点帮助。

补充知识:vue中如何在外部调用methods的方法

1.首先定义一个公共的vue组件;

var eventHub = new Vue();

2.在事件当前的组件中,在created中,用$on向公共的组件eventHub传递,translate是自定义的,getCardNum(data)是要在外部调用的方法;

eventHub.$on('translate', function (data) {
    that.getCardNum(data);
   });

3.最后在父组件中,注意负组件要用一个变量保存,

var vm = new Vue({});

4.在父组件中的methods的方法中定义一个方法,在方法里用$emit接收公共组件里的方法;

var vm = new Vue({
  el: '#example',
  data: {
   msg: 'Hello Directive',
   data: {}
  },
  methods: {
   getCardNum: function (data, on) {
    eventHub.$emit('translate', data);
   }
  }
 });

5.最后就可以在vue组件外部,或者文件外部调用getCardNum(data)这个函数,比如在html中就可以 onclick = vm.getCardNum() 这样来调用;vm是父组件

6.注意一定要把父组件的变量名写上

vm.getCardNum();

我用vue开发的过程中,遇到java后台的弹窗页面想要调用我vue组件中的方法,可是后台的弹窗页面并没有在我的vue组件中,其他的页面想要调用的vue中的方法,

只能在父组件中调用,于是研究了很久,最后确定,将组件中的function()方法传递到最上一层的父组件中,将负组件保存在变量中,最后直接在其他页面中调用方法,调用的时候,就不能用@click方法来调用了,

因为后台的页面并不在我的vue组件内部,于是调用就是onclick = vm.getCardNum();这样调用,vm是父组件;

以上这篇在vue项目中 实现定义全局变量 全局函数操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Zero Clipboard js+swf实现的复制功能使用方法
Mar 07 Javascript
JS setCapture 区域外事件捕捉
Mar 18 Javascript
javascript中使用css需要注意的地方小结
Sep 01 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
Jun 10 Javascript
JavaScript中实现异步编程模式的4种方法
Sep 24 Javascript
javascript表单验证和Window详解
Dec 11 Javascript
angularJS中router的使用指南
Feb 09 Javascript
Vue 过渡(动画)transition组件案例详解
Jan 22 Javascript
Angular1.x复杂指令实例详解
Mar 01 Javascript
使用Electron构建React+Webpack桌面应用的方法
Dec 15 Javascript
360doc网站不登录就无法复制内容的解决方法
Jan 27 Javascript
element-ui带输入建议的input框踩坑(输入建议空白以及会闪出上一次的输入建议问题)
Jan 15 Javascript
vue3+typescript实现图片懒加载插件
Oct 26 #Javascript
原生js实现简单轮播图
Oct 26 #Javascript
vue项目开启Gzip压缩和性能优化操作
Oct 26 #Javascript
Vue检测屏幕变化来改变不同的charts样式实例
Oct 26 #Javascript
解决ant design vue中树形控件defaultExpandAll设置无效的问题
Oct 26 #Javascript
vue下载二进制流图片操作
Oct 26 #Javascript
JavaScript如何操作css
Oct 24 #Javascript
You might like
解析:使用php mongodb扩展时 需要注意的事项
2013/06/18 PHP
限制ckeditor上传图片文件大小的方法
2013/11/15 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
分享ES6的7个实用技巧
2018/01/18 Javascript
微信小程序实现之手势锁功能实例代码
2018/07/19 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
图解javascript作用域链
2019/05/27 Javascript
JS实现手写 forEach算法示例
2020/04/29 Javascript
node脚手架搭建服务器实现token验证的方法
2021/01/20 Javascript
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
Ubuntu+python将nii图像保存成png格式
2019/07/18 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
高性能装备提升营地:Kammok
2019/02/27 全球购物
几个人围成一圈的问题
2013/09/26 面试题
Jar包的作用是什么
2014/03/30 面试题
工程造价专业求职信
2014/07/17 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
博士生专家推荐信
2015/03/25 职场文书
村主任当选感言
2015/08/01 职场文书
关于Numpy之repeat、tile的用法总结
2021/06/02 Python
CSS中calc(100%-100px)不加空格不生效
2023/05/07 HTML / CSS