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 相关文章推荐
实现web打印的各种方法介绍及实现代码
Jan 09 Javascript
JavaScript中instanceof运算符的用法总结
Nov 19 Javascript
js中hash和ico的关联分析
Feb 05 Javascript
jQuery满屏焦点图左右滚动特效代码分享
Sep 07 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
Sep 05 Javascript
详解VueJS 数据驱动和依赖追踪分析
Jul 26 Javascript
完美解决mui框架off-canvas侧滑超出部分隐藏无法滚动的问题
Jan 25 Javascript
vue 的点击事件获取当前点击的元素方法
Sep 15 Javascript
微信小程序框架的页面布局代码
Aug 17 Javascript
vue请求服务器数据后绑定不上的解决方法
Oct 30 Javascript
Openlayers实现地图的基本操作
Sep 28 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 在文件指定行插入数据的代码
2010/05/08 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
php使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
php文件后缀不强制为.php的实操方法
2019/09/18 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
JavaScript 定义function的三种方式小结
2009/10/16 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
2019/04/28 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
Python标准库os.path包、glob包使用实例
2014/11/25 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
单利模式及python实现方式详解
2018/03/20 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
浅谈Python中的模块
2020/06/10 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
python 利用zmail库发送邮件
2020/09/11 Python
招商专员岗位职责
2014/02/08 职场文书
教师考核评语
2014/04/28 职场文书
学校运动会报道稿
2014/09/23 职场文书
党员教师四风自我剖析材料
2014/09/30 职场文书
学校证明范文
2015/06/24 职场文书
家长会后的感想
2015/08/11 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
CentOS7环境下MySQL8常用命令小结
2022/06/10 Servers