成都源码时代IT培训总校
全国服务热线:400-0859-208

成都java培训周末班

如何向Vue项目添加JavaScript库所需的代码

Lodash, Moment, Axios, Async... 这些是有用的JavaScript库,您希望在许多Vue.js应用程序中使用这些库。

但是,随着项目的发展,您将将代码分离为单个文件组件和模块文件。您还可能希望在不同的环境中运行您的应用程序,以允许服务器呈现。

除非您找到一种简单而健壮的方法将这些JavaScript库包含在组件和模块文件中,否则它们将是一个麻烦!


多么在Vue.js项目中包含一个库

 

全局变量

将库添加到项目中的天真方法是通过将库附加到window目的:

entry.js

JavaScript
window._ = require('lodash');

 

MyComponent.vue

JavaScript

export default {
  created() {
    console.log(_.isEmpty() ? 'Lodash everywhere!' : 'Uh oh..');
  }
}


针对窗口变量的情况很长,但是,特别是在本讨论中,它们不适用于服务器呈现。当应用程序在服务器上运行时,window对象将是未定义的,因此试图访问属性将以错误结束。


导入每个文件

另一种二流方法是将库导入到每个文件中:

MyComponent.vue

JavaScript
 
import _ from 'lodash';
export default {
  created() {
    console.log(_.isEmpty() ? 'Lodash is available here!' : 'Uh oh..');
  }
}
 
这是可行的,但它并不是很干燥,而且基本上是一种痛苦:您必须记住将它导入到每个文件中,如果您停止在该文件中使用它,则再次删除它。如果您没有正确地设置您的构建工具,那么您的构建中可能会有多个相同库的副本。
 

更好的方法

在Vue项目中使用JavaScript库的较干净和较健壮的方法是将其代理到Vue Prototype对象的属性。让我们这样做,将时间、日期和时间库添加到我们的项目中:

entry.js

JavaScript
import moment from 'moment';


 
Object.definePrototype(Vue.prototype, '$moment', { value: moment });

				


由于所有组件都从Vue Prototype对象继承它们的方法,这将使所有组件都可以在没有全局变量或手动导入的任何组件中自动使用。可以简单地在任何实例/组件中访问this.$moment:

MyNewComponent.vue

JavaScript
 
export default {
  created() {
    console.log('The time is ' . this.$moment().format("HH:mm"));
  }
}
 
现在让我们花时间了解一下这是如何工作的。

Object.defineProperty

我们通常会设置如下对象属性:

JavaScript
Vue.prototype.$moment = moment;
 
你可以在这里做,但是Object.defineProperty相反,我们可以使用descriptor。描述符允许我们设置一些低级别的详细信息,例如我们的属性是否可写,以及它是否在枚举期间显示在for循环等等。

在日常的JavaScript中,我们通常不会考虑这个问题,因为99%的时间我们都不需要这样的细节来分配属性。但是在这里,它给了我们一个明显的优势:用描述符创建的属性是只读默认情况下。

这意味着,一些缺少咖啡的开发人员(可能是您)无法在组件中做一些愚蠢的事情,从而破坏一切:

JavaScript
this.$http = 'Assign some random thing to the instance method';
 
this.$http.get('/'); // TypeError: this.$http.get is not a function
相反,我们的只读实例方法保护我们的库,如果您试图覆盖它,您将得到“TypeError:NotAssistto只读属性”。

$

您会注意到,我们将我们的库代理到一个以美元符号“$”为前缀的属性名。您可能还看到了其他属性和方法,如$refs$on$mount,等等,它们也有这个前缀。

虽然不是必需的,但前缀被添加到属性中,以提醒缺乏咖啡的开发人员(再次),这是一个欢迎您使用的公共API属性或方法,与实例的其他属性不同,这些属性可能只是用于Vue的内部使用。

作为一种基于原型的语言,JavaScript中没有(真正的)类,因此它没有“私有”和“公共”变量或“静态”方法。这个公约是一个温和的替代,我认为是值得遵循的。

您还会注意到要使用您使用的库this.libraryName这可能并不令人惊讶,因为它现在是一个实例方法。

但是,这样做的一个结果是,与全局变量不同,您必须确保在使用库时处于正确的范围内。在回调方法中,无法访问this你的图书馆住的地方。

FAT箭头回调是确保您保持在正确范围内的一个很好的解决方案:

JavaScript
this.$http.get('/').then(res => {
  if (res.status !== 200) {
    this.$http.get('/') // etc
    // Only works in a fat arrow callback.
  }
});

为什么不把它变成插件呢?

如果您计划在多个Vue项目中使用一个库,或者您想要与世界共享它,您可以将其构建到您自己的插件中!

插件抽象了复杂性,并允许您在项目中简单地执行以下操作以添加所选库:

JavaScript
import MyLibraryPlugin from 'my-library-plugin';
 
Vue.use(MyLibraryPlugin);

使用这两行,我们可以在任何组件中使用库,就像我们可以使用Vue路由器、Vuex和其他利用Vue.use.

 

编写插件

首先,为插件创建一个文件。在本例中,我将制作一个插件,将Axios添加到所有Vue实例和组件中,因此我将调用该文件axios.js.

主要要了解的是,插件必须公开install方法,它将Vue构造函数作为个参数:

axios.js

JavaScript
 
export default {
  install: function(Vue) {
    // Do stuff
  }
}
 

现在,我们可以使用前面的方法将库添加到Prototype对象中:

axios.js

JavaScript
 
import axios from 'axios';
export default {
  install: function(Vue,) {
    Object.defineProperty(Vue.prototype, '$http', { value: axios });
  }
}
 
这个use实例方法是将库添加到项目中所需的全部内容。例如,我们现在可以像这样轻松地添加Axios库:

entry.js

JavaScript
import AxiosPlugin from './axios.js';
Vue.use(AxiosPlugin);
new Vue({
  created() {
    console.log(this.$http ? 'Axios works!' : 'Uh oh..');
  }
})
 

奖励:插件可选参数

插件安装方法可以采用可选参数。有些开发人员可能不喜欢调用他们的Axios实例方法。$http由于Vue Resource通常被命名为Vue Resource,所以让我们使用一个可选的参数来允许他们将其更改为他们喜欢的任何东西:

axios.js

JavaScript
 
import axios from 'axios';
export default {
  install: function(Vue, name = '$http') {
    Object.defineProperty(Vue.prototype, name, { value: axios });
  }
}

entry.js
JavaScript
 
import AxiosPlugin from './axios.js';
Vue.use(AxiosPlugin, '$axios');
new Vue({
  created() {
    console.log(this.$axios ? 'Axios works!' : 'Uh oh..');
  }
}) 










 


#标签:Vue.js,JavaScript库,前端开发


世界热门的编程语言, 已风靡 20余年
  • 第 一
    使用量语言
  • 三 大
    基础课程之一
  • 83次
    tiobe排行榜第 一
  • 91%
    编程语言超91%
  • 每周
    用人需求超10万
  • 25年
    长寿编程语言
  • 91.5%
    服务器占比
  • 25亿
    器件运行Java
  • 7亿
    PC运行Java
  • 28款
    可兼容服务器
Java就业薪资统计
课程内容契合企业需求
  • 阿里云/华为云技术
  • 分布式技术
  • Spring全家桶
  • elasticsearch
  • 微信小程序
  • NOSQL
  • 第三方登录
  • MyBatis
源码时代Java7.0版让你少走弯路,摆脱就业困境
  • 第1阶段
  • 第2阶段
  • 第3阶段
  • 第4阶段
  • 第5阶段
  • 第6阶段
  • 第7阶段
  • Java编程入门(JavaSE)

    Java基础语法
    课程内容基础差入门、开发环境搭建、常量、变量、数据类型、运算符....
    项目实战1、编程规范与思路的培养
    2、掌握基本的逻辑算法
    3、熟悉Java底层的一些语法规定
    面向对象编程思想
    课程内容面向对象与面向过程编程思想、类与对象的设计与使用、抽象类、接口、枚举、内部类.....
    项目实战1、培养面向对象编程思想
    2、熟悉面向对象编程相关语法
    3、设计出后面阶段需要的实体类、工具类、模板、接口等基础部分
  • JavaSE进阶

    Java常用API
    课程内容String/StringBuffer/StringBuilder、日期时间相关类以及格式化Format...
    项目实战通过对常用API的使用熟练Java提供的基本功能....
    多线程并发编程
    课程内容什么是线程、线程的多种创建和启动方式、线程同步及安全问题、线程池、定时器等线程知识
    项目实战近阶段知识结合Swing编程做一些桌面应用程序及游戏....
    数据结构/集合框架
    课程内容了解常见数据结构,如堆栈、链表、队列、双端队列、红黑树等....
    项目实战近阶段知识结合Swing编程做一些桌面应用程序及游戏....
    IO/反射/注解
    课程内容文件操作、IO流读写、对象流的序列化与反序列化;反射reflect、常见设计模式
    项目实战学习java操作文件,并且通过io操作读写等操作...
  • 主流数据库管理系统

    MySQL/Oracle
    课程内容数据库原理、MySQL/Oracle安装与使用、SQL、笛卡尔积.....
    项目实战1、了解持久化和JDBC思想以及持久化框架
    2、使用JDBC完成CRUD操作
    3、事务及JDBC控制事务操作....
    JDBC
    课程内容JDBC基本操作、DAO思想和设计、JDBC事务、数据库连接池技术....
    项目实战1、了解持久化和JDBC思想以及持久化框架
    2、使用JDBC完成CRUD操作
    3、事务及JDBC控制事务操作....
  • JavaWeb开发技术详解

    JavaWeb前端
    课程内容HTML网页技术、CSS层叠样式表/JavaScript脚本语言....
    项目实战学些JavaWeb开发相关技术知识,分步完成Web项目基础功能模块....
    JavaWeb基础
    课程内容Tomcat与HTTP协议、Servlet技术、Cookie/Session、JavaBean规范设计与内省机制....
    项目实战学些JavaWeb开发相关技术知识,分步完成Web项目基础功能模块....
    JavaWeb
    课程内容过滤器、监听器、国际化、文件上传下载、令牌机制、验证码、防重复提交、购物车实现
    项目实战学些JavaWeb开发相关技术知识,分步完成Web项目基础功能模块....
  • 大型项目实战

    内容管理系统(CMS)-团队协作
    课程内容使用Spring、SpringMVC、Mybatis、SVN、Bootstrap、页面静态化....
    项目实战内容管理系统是企业信息化建设和电子政务的新宠...
    全栈springboot+ssm项目实战(多项目选择)
    课程内容使用到了Springboot,Spring、SpringMVC、Mybatis、Shiro、redis,rabbitmq.....
    项目实战智能商贸系统中的核心业务是完全模拟实际项目开发流程进行...
    前后端分离+微服务项目实战(多项目选择)
    课程内容本项目主要包括了商品及库存模块开发、商城系统、会员系统、订单系统、支付系统....
    项目实战平台级项目,多业务系统整合开发;大型电商平台的核心业务及流程....
    大数据实践
    课程内容了解大数据的应用场景、熟悉Hadoop生态圈、集群环境部署、分布式文件系统HDFS.....
    项目实战在能够使用前沿的技术框架搭建中大型企业级项目的基础上又掌握了大数据项目开发....
    移动端微信程序项目
    课程内容了解移动端产品的常见实现,了解小程序开发流程,搭建小程序开发环境....
  • 前沿高薪技术

    前沿高薪技术
    课程内容短信验证码集成;第三方支付(微信或支付宝)第三方登陆技术;阿里OSS存储.....
    项目实战根据市场需要适时加入高薪技术,旨在高薪!
  • 就业与服务

    就业指导
    课程内容企业通用面试技巧、知识点面试技巧、模拟面试、项目面试技巧....
    面试直通车
    课程内容面试经验交流、面试技术解惑、面试项目跟踪。
    售后服务
    课程内容随时随地为同学们提供全方位工作问题解决方案!源码时代是具有售后的服务机构!
针对企业需求实时更新课程 ,所学技术与就业市场1:1匹配
Java授课技术
  • 安全框架SpringSecurity
  • Springcloud Alibaba
  • 容器编排技术k8s
  • swagger接口管理中具
  • 华为云
  • 下一代微服务服务网格istio
  • 微信小程序
  • 报表展示解决方案: echarts
  • sharding jdbc读写分离
  • 分布式事务
  • 分布式锁
Java热门技术点
  • 发力任务调度技术xxl-job
  • 集成RocketMQ
  • 集成MongoDB
  • 集成Netty
  • 对齐企业敏捷项目管理&Devops实战
  • 吃透Git分支企业应用
  • 发力购买系统
  • 落地微服务拆分解决方案
  • 吃透主流框架源码
  • 落地中台解决方案
  • 对齐Java11新特性
细分层级进阶教学 ,让你不仅学会,更要学精
为什么前端是互联网的不二选择?
  • 源码CMS系统
  • PSS进销存系统
  • 源码CRM管理系统
  • 爱购网系统
  • 客户管理系统
  • 4S店管理系统
  • CMS内容管理系统,该项目麻雀虽小,五脏俱全,Spring+SpringMVC+mybatis为主要架构,Bootstrap: 现下非常火的,推特前端开源框架,SVN:版本控制系统,富文本编辑器 页面静态化(FreeMarker) 等技术融入
  • 本软件是专为企业、店铺、个人开发的进、销、存管理、理财、员工管理的工具软件,软件具有功能完备、实用简单、使用方便,上手快的特点,是小型企业、店铺 、个人理想的管理和理财工具 Spring+SpringMVC+SpringDataJpa为主要架构
  • 自选分组-客户关系/档案管理/物流系统,Spring+SpringMVC+MyBatis作为项目的主框架,Maven模块化开发,Vue(现在较火的前端框架),前后端分离,百度地图定位 持续集成Jenkins,CXF实现WebService技术,第三方登陆技术(QQ、微信)
  • B2C电商平台项目,爱购网上商城是一个综合性的B2C平台,类似京东商城、天猫商城。会员可以在商城浏览商品、下订单等。Mycat分表,分布式缓存Redis,微信支付/支付宝支付 FastDFS云存储,流量控制、分布式事务
  • 客户关系管理系统用于管理与客户相关的信息与活动,包括企业与顾客间在销售、营销和服务上的交互,从而提升其管理方式,向客户提供创新式的个性化的客户交互和服务的过程。Spring+SpringMVC+MyBatis作为项目的主框架
  • 4S店汽车维修管理系统提供汽车的维修服务,维修配件的入库,维修配件的检索,车辆维修工单,维修明细单,结算单的管理,并提供维修之后的还车业务,还提供公共的维修结算工单查询,以及基础数据管理,报表的查询,以及权限管理等功能
强大的课程研发团队, 大咖云集,实力
  • 赵老师
    赵老师

    多年软件开发工作与项目管理经验,以及JavaEE应用开发。曾参与开发台湾超捷物流系统,淘宝商城爱蜂潮企业ERP,重庆天古装饰ERP,北京永泰地产流程设计等项目。并组织与研发重庆军方加油站警报系统,中国总经理网站后台,蓝源服饰Saas服务平台等系统。

  • 胡老师
    胡老师

    EasyJf开源团队成员,具备多年的软件开发、产品设计、产品运营和团队管理经验。所设计的产品主要有:泛流通行业进销存;生产制造行业、服装、装饰行业ERP企业管理系统;办公OA、CRM以及各类网站建设;曾与天古集团、成法集团、淘宝商城爱蜂潮等企业合作。

  • 姚老师
    姚老师

    五年项目研发和管理经验,10年工作经验。先后参与华为IDC、企业网盘、运营商网盘等软件的开发。参与华为网管Toolkit等软件的设计、架构并带领团队一起顺利开发并实施。

  • 孙老师
    孙老师

    多年J2EE项目经验和管理经验,曾参与云天化erp、海底捞、龙蟠、紫金花及各大院校管理系统,以及门户网站; 热衷前言技术的研究及其在实战中的应用。

就业渠道
  • 企业定制
  • 简历置顶
  • 企业内推
  • 内部招聘
  • 名企双选会
以用心服务,换学员高“薪”
  • 提供宿舍
    源码时代为广大学员提供宿舍,入学可享受宿舍
  • 0元入学
    无需担心学费负担源码时代提供0元入学,让你学习不停
  • 0元重读
    认为自己技术不?没关系,源码时代提供0元重读
  • 学费分期
    经济压力大,又想学习怎么办?源码为广大学子提供学费分期
  • 终身辅导
    一次学习,终身辅导无需担心售后服务 毕业也可向老师请 教问题
  • 面试培训
    就业辅导,帮你做好职业规划,让你轻轻松松拿下心仪的工作
免费课程预约
每天限量名额,先到先得
二维码

扫一扫 免费领取试听课

尊重原创文章,转载请注明出处与链接:http://www.peixun360.com/news/503043/违者必究! 以上就是成都源码时代IT培训总校 小编为您整理成都java培训周末班的全部内容。

版权所有:培训指南(www.peixun360.com) 技术支持:培训指南网

温馨提示:提交留言后老师会第一时间与您联系!热线电话:400-0859-208