基于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 相关文章推荐
phpwind放自动注册方法
Dec 02 Javascript
javascript写的简单的计算器,内容很多,方法实用,推荐
Dec 29 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 Javascript
使用jQuery给input标签设置默认值
Jun 20 Javascript
基于Vue如何封装分页组件
Dec 16 Javascript
js实现日历与定时器
Feb 22 Javascript
微信小程序遇到修改数据后页面不渲染的问题解决
Mar 09 Javascript
详解vue-cli 脚手架项目-package.json
Jul 04 Javascript
jQuery实现模糊查询的方法分析
May 10 jQuery
微信小程序实现点赞、取消点赞功能
Nov 02 Javascript
element-ui 时间选择器限制范围的实现(随动)
Jan 09 Javascript
elementUI table表格动态合并的示例代码
May 15 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时间相差8小时
2007/01/15 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
PHP自动识别字符集并完成转码详解
2013/08/02 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
PHP使用JSON和将json还原成数组
2015/02/12 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
qTip2 精致的基于jQuery提示信息插件
2012/02/17 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
js实现跨域访问的三种方法
2015/12/09 Javascript
基于javascript简单实现对身份证校验
2021/01/25 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
Angular4学习教程之HTML属性绑定的方法
2018/01/04 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
Vue实现数据请求拦截
2019/10/23 Javascript
Vue自定义全局弹窗组件操作
2020/08/11 Javascript
详解Django中的过滤器
2015/07/16 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
Django Rest framework频率原理与限制
2019/07/26 Python
解析python实现Lasso回归
2019/09/11 Python
Django集成celery发送异步邮件实例
2019/12/17 Python
Python操作Jira库常用方法解析
2020/04/10 Python
使用CSS3在触屏上为按钮实现激活效果
2013/09/27 HTML / CSS
巴西购物网站:Estrela10
2018/12/13 全球购物
保证书格式范文
2014/04/28 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
研究生求职自荐书
2014/06/23 职场文书
《打电话》教学反思
2016/02/22 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS
一文了解MySQL二级索引的查询过程
2022/02/24 MySQL
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
2022/04/14 Python