【Vue】04 模块化开发演变
JS最初的目的是用来做表单验证和动画效果,可以让网页更加生动。
但是使用Ajax,前后端分离,页面承担了更多的事情,JS的代码量暴增,代码管理维护逐渐困难
我们需要将JS代码抽取出来,模块化处理,
但是问题也出现了,各个模块的变量会污染。
JS文件a:
flag = true;
JS文件b:
flag = false;
页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/a.js"></script>
<script src="js/b.js"></script>
<script type="text/javascript">
if (flag) console.log("flag的值为:" + flag);
</script>
</head>
<body> </body>
</html>
效果:

可以发现,flag是false,但是我们希望的是使用A文件的flag,这就是变量污染
使用模块作为出口:
A文件:
moduleA = (function () {
return true;
})();
B文件:
moduleB = (function () {
return false;
})();
页面使用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/a.js"></script>
<script src="js/b.js"></script>
<script type="text/javascript">
console.log("flag的值为:",moduleA);
</script>
</head>
<body> </body>
</html>
效果:

这样我就明确知道我需要的是什么模块的变量了
我们希望引用模块的时候不止一个变量应该被使用:
所以我们可以以一个对象的形式去返回:
moduleB = (function () {
let obj = {};
obj.property1 = "sadas";
obj.property2 = true;
obj.property3 = ['sdd', 'dsd', 'dsa', 'dsd', 'sds',];
obj.property4 = {
prop1 : "sadas"
};
obj.property5 = 1000;
return obj;
})();
效果:

这就是模块化的雏形
ES6的关键字:Export & Import
export的作用是为了导出变量:
export let name = "sss"
export let age = 22
export let gender = true
import导入:
<script type="text/javascript">
import {name, age, gender} from './js/a.js';
console.log(name, age, gender);
</script>
如果要导出所有变量,可以使用:
<script type="text/javascript">
import * as aaa from './js/a.js';
console.log(aaa);
</script>
获取里面的单个变量:
<script type="text/javascript">
import * as aaa from './js/a.js';
console.log(aaa.name, aaa.gender, aaa.age);
</script>
方法的导出:
export function method01() {
console.log(name, age, gender);
}
导入使用:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/a.js"></script>
<script src="js/b.js"></script>
<script type="text/javascript">
import * as aaa from './js/a.js';
aaa.method01();
</script>
</head>
<body> </body>
</html>
export default 关键字:
我们的模块不设置名称,交给使用者来命名:
let user = {
name : "阿伟",
age : 23,
gender : true
}
export default user;
调用页:
<script type="text/javascript">
import aw from "./js/ed.js";
console.log(aw.gender);
</script>
export default不允许在同一个模块内多次使用,无法分清调用的是哪一个具体的变量,变量污染问题
但是似乎不允许。。。

【Vue】04 模块化开发演变的更多相关文章
- 利用requirejs实现vue的模块化开发
通常vue都是搭配webpack+vue-cli使用的 如果不在nodejs环境下开发web应用呢? 这里提出一个解决方案: 1.加载requirejs,并且指定main函数 <script d ...
- Vue(十七)模块化开发
模块化开发 使用vue-cli创建项目 1. vue-router模块化 引入vue-router cnpm install vue-router -S 1.1 编辑main.js imp ...
- 基于vue模块化开发后台系统——准备工作
文章目录如下:项目效果预览地址项目开源代码基于vue模块化开发后台系统--准备工作基于vue模块化开发后台系统--构建项目基于vue模块化开发后台系统--权限控制 前言 本文章是以学习为主,练习一下v ...
- 基于vue模块化开发后台系统——构建项目
文章目录如下:项目效果预览地址项目开源代码基于vue模块化开发后台系统--准备工作基于vue模块化开发后台系统--构建项目基于vue模块化开发后台系统--权限控制 前言 在熟悉上一篇说到准备工具之后, ...
- Vue使用SCSS进行模块化开发
原文地址:http://www.cnblogs.com/JimmyBright/p/7761531.html 个人认为scss最大的好处就是能将css属性设置为变量,这样让css一键更换主题成为可能. ...
- 前端模块化开发学习之gulp&browserify篇
随着web应用的发展,前端的比重占得越来越多,编写代码从而也越来越复杂.而通常我们需要将不同功能或者不同模块的代码分开写,最后在html中一起加载,这样做是可以的,但是当你需要进行维护或者是二次开发 ...
- [工具配置]使用requirejs模块化开发多页面一个入口js的使用方式
描述 知道requirejs的都知道,每一个页面需要进行模块化开发都得有一个入口js文件进行模块配置.但是现在就有一个很尴尬的问题,如果页面很多的话,那么这个data-main对应的入口文件就会很多. ...
- JavaScript学习总结(六)——前端模块化开发
早期的javascript版本没有块级作用域.没有类.没有包.也没有模块,这样会带来一些问题,如复用.依赖.冲突.代码组织混乱等,随着前端的膨胀,模块化显得非常迫切. 前端模块化规范如下: 一.前端模 ...
- 06Vue.js快速入门-Vue组件化开发
组件其实就是一个拥有样式.动画.js逻辑.HTML结构的综合块.前端组件化确实让大的前端团队更高效的开发前端项目.而作为前端比较流行的框架之一,Vue的组件和也做的非常彻底,而且有自己的特色.尤其是她 ...
- 使用requirejs模块化开发多页面一个入口js的使用方式
描述 知道requirejs的都知道,每一个页面需要进行模块化开发都得有一个入口js文件进行模块配置.但是现在就有一个很尴尬的问题,如果页面很多的话,那么这个data-main对应的入口文件就会很多. ...
随机推荐
- Vue简单自定义Canvas验证码组件。
在您的Vue项目中,是否曾遇到过需要增加验证码来增强账户安全性的情况?这个Vue通用Canvas验证码组件!采用Canvas,实现了高度自定义和灵活的验证码生成方式,让您的网站或应用轻松应对各类验证码 ...
- kettle从入门到精通 第十七课 kettle Transformation executor
Transformation executor步骤是一个流程控件,和映射控件类似却又不一样. 1.子转换需要配合使用从结果获取记录和复制记录到结果两个步骤,而子映射需要配合映射输入规范和映射输出规范使 ...
- OOP第一阶段题集总结
一.前言 知识点:数组,字符串的使用,链表,hashmap,泛型的使用,正则表达式的使用,类的设计,类与类之间的关系,单一职责. 题量:题目数量为5+4+3,数量适中,其中都是前几题较简单,最后一题较 ...
- 使用命令行(powershell)压缩(7Z RAR)指定日期文件
使用命令行(powershell)压缩(7Z RAR)指定日期文件,powershell ,7z. WINDOWS命令行是无法按时间过滤文件的,我们通过powershell 里的Get-ChildIt ...
- 用 Python 绘制现金流量图
目录 用 Python 绘制现金流量图 Python 实现 实现原理 具体代码 使用示例 1:根据现金流量表绘制现金流量图 使用示例 2:绘制等额.等差.等比序列现金流量图 等额序列现金流量图 等差序 ...
- Linux 提权-Docker 容器
本文通过 Google 翻译 Docker Breakout – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充. ...
- 千万别忽视基础!十张图带你一步步理解Java内存结构!
作为一个Java程序员,在日常的开发中,不必像C/C++程序员那样,为每一个内存的分配而操心,JVM会替我们进行自动的内存分配和回收,方便我们开发.但是一旦发生内存泄漏或者内存溢出,如果对Java内存 ...
- AT_abc317_f 题解
调了一小时结果发现爆 long long 了. 考虑数位 dp,具体来说,设计状态 \(dp_{i,r_1,r_2,r_3,mx_1,mx_2,mx3_,c_1,c_2,c_3}\) 表示当前考虑到第 ...
- Java常见问题-基础
JDK版本新特性: JDK1.4 正则表达式,异常链,NIO,日志类,XML解析器,XLST转换器 JDK1.5 自动装箱.泛型.动态注解.枚举.可变长参数.遍历循环 JDK1.6 提供动态语言支持. ...
- 关联的巧妙用法limit_choices_to
sa_no = models.ForeignKey(CU004HModel, verbose_name='销货单', on_delete=models.PROTECT, related_name='C ...