RequireJS多页面应用实例分析


Posted in Javascript onJune 29, 2016

本文是requireJS的一些知识点的总结,配上多页面应用中的实例分析。

本案例的目录结构如下:

requireJS API的三个主要函数:define(创建模块),require(加载模块),config(配置)

1、 HTML文件中加载JS文件

page1.html内容如下:

<!DOCTYPE html>
<html>
<head>
<title>Page 1</title>
<script data-main="scripts/page1" src="scripts/lib/require.js"></script>
</head>
<body>
<a href="page2.html">Go to Page 2</a>
</body>
</html>

page2.html内容如下:

<!DOCTYPE html>
<html>
<head>
<title>Page 2</title>
<script data-main="scripts/page2" src="scripts/lib/require.js"></script>
</head>
<body>
<a href="page1.html">Go to Page 1</a>
</body>
</html>

知识扩展:

data-main属性指定网页程序的主模块,这个文件被requireJS首先加载。由于requireJS默认的文件后缀名是js,所以可以把page1.js简写成page1

加载脚本文件的根路径优先规则

用require()加载模块时,省略.js后缀,会从baseUrl下查找;如果带有.js后缀、或以”/"开始、或包含URL协议(http/https)则将根

据你的具体路径设置去查找

config > data-main > 默认baseUrl

不对data-main和config进行设置,则默认baseUrl为引用require.js的那个HTML页面所在目录

设置data-main,则baseUrl为主模块所在目录(如第一段HTML中的主模块为page1.js,因此以其所在目录/scripts为根目录)

配置config,显式设置baseUrl,也可为每一个模块单独设置路径

2、对模块的路径等进行配置

使用require.config()方法,可以对模块的加载行为进行自定义。在多页面应用中,可以将配置写在共用的文件中,如本例中的common.js文件,然后各个页面加载当前配置后,在回调函数中再加载各自需要的模块。

common.js代码如下:

require.config({
baseUrl: 'scripts/app',
paths: {
jquery: [
'http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min',
'../lib/jquery'
]
}
});

知识扩展:

支持的配置项:

baseUrl :

所有模块的查找根路径。注意:当加载的js文件(以.js结尾、以”/”开头、含有协议),不会使用baseUrl;

paths :

path映射那些不直接放置于baseUrl下的模块名。设置path时起始位置是相对于baseUrl的,除非该path设置以"/"开头或含有URL协议;

注意:在paths中定义的路径不能含有.js后缀,因为路径解析机制会自动添加上.js后缀;而且加载路径可以设置多个,如从CDN加载失败,则加载本地js文件;

shim:

为那些没有使用define()来声明依赖关系的模块进行配置;

其中需要注意两个参数:

(1)exports值(输出的变量名),暴露方法接口

(2)deps数组,表明该模块的依赖性

如:

require.config({
baseUrl: '/scripts/lib',
shim:{
zepto: {
exports: '$'
},
backbone: {
deps: ['underscore', 'zepto'],
exports: 'Backbone'
},
'zepto.animate': ['zepto']
}
});

3、模块的加载

page1.js代码如下:

require(['./common'], function (common) {
require(['sayPage1'], function (sayPage1) {
sayPage1.hello();
});
});

page2.js代码如下:

require(['./common'], function (common) {
require(['sayPage2'], function (sayPage2) {
sayPage2.hello();
});
});

知识拓展: 

 require()函数接受两个参数。第一个参数是一个数组,表示所依赖的模块;第二个参数是一个回调函数,当前面指定的模块都加载成功后,它才会被调用。加载的模块可以作为回调函数的参数进行调用。

这里为了保证配置完成后才加载需要的模块,主要是为了路径的正确解析,在回调函数中再进行require。

4、模块的定义

sayPage1.js中的代码:

define(['jquery'], function($) {
function sayHi(){
$('body').append('<h1>Hello page1!</h1>');
}
return {
hello: sayHi
}
});

知识扩展:

define函数也接受两个参数。第一个参数为所依赖模块组成的数组,第二个参数是一个回调函数。

当然最后上线的时候还要进行JS文件的合并与压缩,可以利用r.js,方便快捷~

以上所述是小编给大家介绍的RequireJS多页面应用实例分析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript时间自动刷新实现原理与步骤
Jan 06 Javascript
ie8 不支持new Date(2012-11-10)问题的解决方法
Jul 31 Javascript
JavaScript设计模式之抽象工厂模式介绍
Dec 28 Javascript
javascript中if和switch,==和===详解
Jul 30 Javascript
JavaScript如何实现跨域请求
Aug 05 Javascript
学习掌握JavaScript中this的使用技巧
Aug 29 Javascript
jQuery给表格添加分页效果
Mar 02 Javascript
JS判断Android、iOS或浏览器的多种方法(四种方法)
Jun 29 Javascript
layui点击导航栏刷新tab页的示例代码
Aug 14 Javascript
详解Vue项目中实现锚点定位
Apr 24 Javascript
vue实现全匹配搜索列表内容
Sep 26 Javascript
ant design pro中可控的筛选和排序实例
Nov 17 Javascript
全面了解JS中的匿名函数
Jun 29 #Javascript
大型JavaScript应用程序架构设计模式
Jun 29 #Javascript
基于JS模仿windows文件按名称排序效果
Jun 29 #Javascript
JavaScript中闭包的写法和作用详解
Jun 29 #Javascript
浅谈window.onbeforeunload() 事件调用ajax
Jun 29 #Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
Jun 29 #Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
Jun 28 #Javascript
You might like
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
header导出Excel应用示例
2014/01/24 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
2013/03/17 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
原生js jquery ajax请求以及jsonp的调用方法
2017/08/04 jQuery
js中url对象化管理分析
2017/12/29 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
2018/01/12 Javascript
Vue + better-scroll 实现移动端字母索引导航功能
2018/05/07 Javascript
详解微信小程序用定时器实现倒计时效果
2019/04/30 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
微信小程序实现简单购物车功能
2020/12/30 Javascript
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
Python实现读取并保存文件的类
2017/05/11 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
django如何通过类视图使用装饰器
2019/07/24 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
如何关掉pycharm中的python console(图解)
2019/10/31 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
年度考核自我鉴定
2014/02/02 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
工作建议书范文
2019/07/08 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang