基于require.js的使用(实例讲解)


Posted in Javascript onSeptember 07, 2017

本篇文章总结下require.js使用方法。

1.为什么使用require.js?

使用之前,我的页面的js是这样的

<script type="text/javascript" src="/js/jquery.min.js"></script>
<script type="text/javascript" src="/js/bootstrap.min.js"></script>
<script type="text/javascript" src="/js/jquery.bootstrap.min.js"></script>
<script type="text/javascript" src="/js/plugins/layer/layer.min.js"></script>
<script src="/Scripts/common/zTree/js/jquery.ztree.core.js"></script>
<script src="/Scripts/common/zTree/js/jquery.ztree.excheck.js"></script>
<script type="text/javascript" src="/js/plugins/layer/laydate/laydate.js"></script>
<script type="text/javascript" src="/js/Bootstrap-Select/bootstrap-select.js"></script>

由于这些js代码一般都写在模板中,因此不管我的页面如何简单,用不用的到这么多js,这些js都会加载,而我们大家都知道,加载js时页面会停止渲染,直到js加载完成后,才继续渲染,因此造成页面响应时间会很长,

而且你无法知晓这么多js的依赖关系,如果你移动了js的前后关系,就会出现一些错误。

require.js的作用就是为了解决这两个问题:

1.实现js文件的异步加载,减少网页响应的时间

2.管理js之间的依赖性,便于维护

2.使用方法讲解

首先删除掉模板页中的这8个js引用,在自己的页面引入require.js(没有的可自行去官网下载):

<script src="~/Scripts/common/require.js" data-main="/Scripts/main" data-entry="/Scripts/category/category.js"></script>

data-main配置的是主要的js,我这里配置的是网站根目录下Scripts文件下的main.js,用于全局的配置。

data-entry是我扩展的属性,用于加载该页面独有的js。

以下为main.js代码:

require.config({
  baseUrl: 'http;//www.cdnxxx.com/',
  paths: {
    "jquery": "hplus/js/jquery.min",
    "bootstrap": "hplus/js/bootstrap.min",

 "bootstrapselect": "/Content/Bootstrap-Select/bootstrap-select",

   "laydate": "/Scripts/plugins/laydate/laydate",
    "utility": "/Scripts/utility"
  },
  shim: {
    'bootstrapselect': {
      deps: ['jquery', 'bootstrap']
    },
    'bootstrap': {
      deps: ['jquery']
    },
    'utility': {
      deps: ['jquery'],
      exports: 'Utility'
    },'laydate': {
      exports: 'laydate'
    }
  }
});

require(['jquery'], function ($) {

  var entry = $('[data-entry]').data("entry");
  require([entry]);
});

其中require.config()方法配置js的路径,baseUrl指的是基目录,paths中配置的路径默认会在前方加上baseUrl的值;

shim参数配置js的依赖项和输出对象,如bootstrapselect依赖于jquery和bootstrap,laydate输出/返回的对象为laydate。

当前页面加载的category.js代码如下:

define(['jquery', 'utility', 'bootstrap', 'bootstrapselect'], function ($, Utility) {

  var category = {
    init: function () {
      this.setOptions();
      this.bindEvent();

      self.getList();
    },
    setOptions: function () {
      this.btnQuery = $("#btnQuery");
      this.divList = $("#divList");
    },
    bindEvent: function () {
      var self = this;
      self.btnQuery.on("click", function () { self.getList(); });
    },
    getList: function () {
      var self = this;

      $.post(self.divList.data("url"), { channelCode: $.trim($("#ddlChannel").val()) }, function (result) {
        self.divList.html(result);
      });
    }
  };

  $(function () {
    category.init();
  });
});

define方法的第1个参数为数组,代表当前页面要加载的js,如上面所示,当前页面加载了jquery,utility,bootstracp,bootstracpselect这4个js,

第二个参数为回调函数,当第一个参数中的js异步加载完成后,会被调用,方法中的$对应的jquery返回的对象,Utility对应的unility返回的对象,这两个对象可以在回调函数的任何地方使用。

截止目前,我们已了解require.js的使用方法,如果开发其它页面,可以按需加载,如页面只需要jquery就够了,则只引入jquery即可:

define(['jquery'], function ($) {
// some code
});

3.注意事项

require.config({
  baseUrl: 'http;//www.cdnxxx.com/',
  paths: {
    "jquery": "hplus/js/jquery.min",
    "bootstrap": "hplus/js/bootstrap.min",

 "bootstrapselect": "/Content/Bootstrap-Select/bootstrap-select",

   "laydate": "/Scripts/plugins/laydate/laydate",
    "utility": "/Scripts/utility"
  }
});

1.在以上代码中,由于bootstrapselect,laydate.utility配置的路径都以"/"开头,因此加载时不会被加上baseUrl的值,而jquery,bootstrap真正加载时会被加上baseUrl的值,即http://www.cdnxxx.com/hplus/js/juqery.min.js

2.paths中配置的路径默认都会加上.js,因此配置时应省略.js,否则会出错

以上这篇基于require.js的使用(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript事件列表解说
Dec 22 Javascript
JavaScript XML和string相互转化实现代码
Jul 04 Javascript
js原生appendChild的bug解决心得分享
Jul 01 Javascript
JavaScript中的Math 使用介绍
Apr 21 Javascript
js实现页面跳转的五种方法推荐
Mar 10 Javascript
AngularJS 整理一些优化的小技巧
Aug 18 Javascript
很棒的一组js图片轮播特效
Jan 12 Javascript
vue 实现通过手机发送短信验证码注册功能
Apr 19 Javascript
vue-content-loader内容加载器的使用方法
Aug 05 Javascript
vue移动端屏幕适配详解
Apr 30 Javascript
详解async/await 异步应用的常用场景
May 13 Javascript
element tree树形组件回显数据问题解决
Aug 14 Javascript
基于vue.js路由参数的实例讲解——简单易懂
Sep 07 #Javascript
JQuery 获取多个select标签option的text内容(实例)
Sep 07 #jQuery
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 #jQuery
jQueryUI Sortable 应用Demo(分享)
Sep 07 #jQuery
Django使用多数据库的方法
Sep 06 #Javascript
node.js实现微信JS-API封装接口的示例代码
Sep 06 #Javascript
详解require.js配置路径的用法和css的引入
Sep 06 #Javascript
You might like
PHP小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
解析php mysql 事务处理回滚操作(附实例)
2013/08/05 PHP
从零开始学YII2框架(二)通过 Composer 安装扩展插件
2014/08/20 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
js静态方法与实例方法分析
2011/07/04 Javascript
屏蔽网页右键复制和ctrl+c复制的js代码
2013/01/04 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
javascript代码运行不出来执行错误的可能情况整理
2013/10/18 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
jquery实现点击页面计算点击次数
2015/01/23 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
js匿名函数使用&amp;传参(实例)
2017/09/08 Javascript
Vue封装Swiper实现图片轮播效果
2018/02/06 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
Pyramid添加Middleware的方法实例
2013/11/27 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
python中web框架的自定义创建
2019/09/08 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
英国电器零售商:PRC Direct
2018/06/21 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
投标邀请书范文
2014/01/31 职场文书
工程管理英文求职信
2014/03/18 职场文书
2014中考励志标语
2014/06/05 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
解决MySQL报“too many connections“错误
2022/04/19 MySQL