必备技能六、Vue中实现全局方法
现实背景:很多时候我们会在全局调用一些方法。
实现方式两种:官网的实现use方法,然后你也可以用野路子直接在Vue.prototype上面定义。
先说野路子,因为其实野路子就是最根本的实现方式,官方的use实现也是一样的,只是use很好的封装了。
/* *main.js中实例Vue时添加方法
*/
import Vue from 'vue';
//这样以后你就可以在该项目下的其他组件中使用hello了,直接调用 this.hello('正字表达狮')。
Vue.prototype.hello = function(name){
console.log(`hello ${name}`)
} new Vue({
el: '#app',
router,
store,
render: h => h(App)
})
原理很简单,因为Vue实质上就是一个对象。大多数对象都会存在原型对象,在Vue原型上添加了方法之后,new Vue()实例化时vm就继承了该方法。因为其他组件也会继承vm所以所有的组件都可以调用该方法。接下来看看Vue.use()。
首先我新建一个deta.js。里面封装一个对象。
const date = {
tickToLong(tick) {
let seconds = tick / 1000;
let h = Math.floor(seconds / 60 / 60);
let m = Math.floor((seconds - 60 * 60 * h) / 60);
let s = Math.floor(seconds - 60 * 60 * h - 60 * m);
return h + ':' + m + ':' + s
},
tickToTime(tick){
let date = new Date(tick);
let h = date.getHours() > 9 ? date.getHours() : '0' + date.getHours();
let i = date.getMinutes() > 9 ? date.getMinutes() : '0' + date.getMinutes();
let s = date.getSeconds() > 9 ? date.getSeconds() : '0' + date.getSeconds();
return h+':'+i+':'+s
}
}
const install = function(vm, options) {//插件必须有这样一个install方法。
vm.prototype._date = date;
}
export default { install }
可以看到里面有一个install方法,然后将该方法暴露出来。install方法是必须的,可看官网use相关部分。我们发现install里面其实就是我们野蛮的第一中种方式。install当中的vm实际上就是Vue这个对象。所以本质上两种方式都是在vue原型上面添加了方法。当然建议大家在工作中不要使用第一种方法。因为别人会觉得你很low啊,而且你的main文件会莫名其妙多很多代码,自己看着也很难受啊。
但是由于模块比较多,我对于每个模块分配了不同的组件,发现一个项目中有许多相同的方法,
在每个组件中我都需要进行重复的编写。
所以,我希望能够将这些公共的方法,抽离出来放到同一个 js 中,这里就取名 util.js

3、实现方法
1、方法一
暴露接口的方式,直接在组件中进行引用
首先在 util.js 单独文件中写两个方法:
在组件中引用,测试了无法在 main.js 中全局引用(有方法请告诉我):
import {a,b} from '../static/js/util.js'
调用:
test: function() {
a();
b();
}
2、方法二:
将公共方法集成到 Vue 原型上,Vue.prototype.name
首先在 util.js 中写方法:
在 main.js 中进行全局引用:
调用:
this.adminApi.a();
this.adminApi.b();
转 https://segmentfault.com/u/allenchinese/activities?page=5
必备技能六、Vue中实现全局方法的更多相关文章
- vue中代理实现方法
vue中代理实现方法如下: const path = require('path'); function resolve(dir) { return path.join(__dirname, dir) ...
- 必备技能六、Vue框架引入JS库的正确姿势
在Vue.js应用中,可能需要引入Lodash,Moment,Axios,Async等非常好用的JavaScript库.当项目变得复杂庞大,通常会将代码进行模块化拆分.可能还需要跑在不同的环境下,比如 ...
- vue中的全局组件和局部组件的应用
1全局组件 vue框架: https://www.vue-js.com/?tab=all 组件树 solt 内置分发组件 应用见局部组件 2局部组件 2.1局部组件的使用:生子 - 挂子 - 用子 & ...
- Android中Application全局方法(变量)的调用
Application和Actovotu,Service一样是android框架的一个系统组件,当android程序启动时系统会创建一个 application对象,用来存储系统的一些信息.通常我们是 ...
- Vue中使用mui方法
第一步 下载 下载网址:http://dev.dcloud.net.cn/mui/ui/ 点击GitHub进行下载 第二步 Vue中引入Mui 将下载好的文件解压 把文件中dist中的三个文件复制到自 ...
- vue中methods一个方法调用另外一个方法
转自http://blog.csdn.net/zhangjing1019/article/details/77942923 vue在同一个组件内: methods中的一个方法调用methods中的另外 ...
- 如何在Vue中建立全局引用或者全局命令
1 一般在vue中,有很多vue组件,这些组件每个都是一个文件.都可能需要引用到相同模块(或者插件).我们不想每个文件都import 一次模块. 如果是基于vue.js编写的插件我们可以用 Vue.u ...
- vue中创建全局单文件组件/命令
1.在 vue中如果我们使用基于vue.js编写的插件,我们可以使用Vue.use() 如在main.js中: 2.添加全局命令,让每个vue单文件组件都可以使用到: 第一步:最好建一个全局的命令文件 ...
- vue 中注册全局组件
1 全局注册组件 建一个 js 文件, 注册全局组件, 并且暴露出去 然后再在 main.js 中引入 在页面就可以直接使用了 2 全局注册过滤器 建立文件, 包含所有过滤器方法 ...
随机推荐
- CAS 5.3.x 相关信息
CAS 5.3.x 相关信息 单点登录系统 学习网站: https://www.apereo.org/projects/cas 官方网站 https://github.com/apereo/cas-o ...
- GenerateId类:生成唯一id、订单号
using System;using System.Security.Cryptography; namespace Infrastructure{ public class GenerateId { ...
- 安装php5.4 mv9 +apache2.2+mysql5.5问题好多。
1 网站目录的设置,网站 默认文件的加载. 2 php.ini文件的加载问题.
- Windows10下Linux系统的安装和使用
WSL 以往我都是直接安装VirtualBox,然后再下载Linux系统的ISO镜像,装到VirtualBox里运行. 改用Win10系统后,了解到了WSL(Windows Subsystem for ...
- quote|additives|Feel free to help| thick of |take in|soar|eternal|add up to|pull through| in reserve|
A quote for a piece of work is the price that someone says they will charge you to do the work. Alwa ...
- motionbuilder卸载/完美解决安装失败/如何彻底卸载清除干净motionbuilder各种残留注册表和文件的方法
在卸载motionbuilder重装motionbuilder时发现安装失败,提示是已安装motionbuilder或安装失败.这是因为上一次卸载motionbuilder没有清理干净,系统会误认为已 ...
- python3下scrapy爬虫(第四卷:初步抓取网页内容之抓取网页里的指定数据延展方法)
上卷中我运用创建HtmlXPathSelector 对象进行抓取数据: 现在咱们再试一下其他的方法,先试一下我得最爱XPATH 看下结果: 直接打印出结果了 我现在就正常拼下路径 只求打印结果: 现在 ...
- Docker私有仓库管理
docker load -i registry.tar.gz docker run -d -p 5000:5000 --restart=always --name registry -v /opt/m ...
- github常用命令汇总
创立版本库 mkdir Baiducd Baidugit init SSHssh-keygen -t -rsa -C "TaylorApril947939@gmail"(在gith ...
- H2O theme for Jekyll
正如我在微博上所说的,使用Jekyll半年以来一直没有令我满意的主题模板,所以开始计划自己写一套好看又好用的主题模板.设计之初就明确了极简主义,风格采用扁平化了,通过卡片式设计来进行区块分明的布局,参 ...