基于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 相关文章推荐
XENON基于JSON变种
Jul 27 Javascript
在Node.js应用中使用Redis的方法简介
Jun 24 Javascript
JavaScript中instanceof运算符的使用示例
Jun 08 Javascript
深入理解JavaScript函数参数(推荐)
Jul 26 Javascript
动态JavaScript所造成一些你不知道的危害
Sep 25 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
Nov 07 Javascript
微信小程序实现页面跳转传值以及获取值的方法分析
Dec 18 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
Feb 03 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
Apr 18 Javascript
vue实现标签云效果的方法详解
Aug 28 Javascript
在antd Form表单中select设置初始值操作
Nov 02 Javascript
关于JavaScript轮播图的实现
Nov 20 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
php5.2.0内存管理改进
2007/01/22 PHP
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
JavaScript对象创建及继承原理实例解剖
2013/02/28 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
javascript闭包的理解
2015/04/01 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
浅谈Webpack打包优化技巧
2018/06/12 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
jQuery实现的别踩白块小游戏完整示例
2019/01/07 jQuery
浅谈Vue.js组件(二)
2019/04/09 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
python中模块查找的原理与方法详解
2017/08/11 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
PyCharm代码格式调整方法
2018/05/23 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
Python中remove漏删和索引越界问题的解决
2020/03/18 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
Python如何定义一个函数
2015/09/01 面试题
采购主管工作职责
2013/12/12 职场文书
自我鉴定 电子商务专业
2014/01/30 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
青春雷锋观后感
2015/06/10 职场文书
2015年食品安全宣传周活动总结
2015/07/09 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
MySQL系列之三 基础篇
2021/07/02 MySQL