zoukankan      html  css  js  c++  java
  • hdjs---后盾网requireJS课程

    hdjs---后盾网requireJS课程

    一、总结

    一句话总结:

    requireJS是js端模块化开发,主要是实现js的异步加载,和管理模块之间的依赖关系,便于代码的编写和维

    1、requireJS目录结构中的app目录和lib目录的作用是什么?

    app目录:存用户自己写的js(自定义模块)
    lib目录:存依赖的js文件

    2、requireJS最简单实例?

    在main.js的paths中配置好jquery,在页面中中使用:require(['jquery'], function ($) {
    main.js
    require.config({
        paths: {
            'jquery': '/lib/jquery.min',
        },
    });
    
    
    页面代码
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <script data-main="../resource/main" src="../resource/require.js"></script>
    </head>
    <body>
    <button onclick="test()">测试</button>
    <script>
        function test() {
            require(['jquery'], function ($) {
                $('body').css({'backgroundColor': 'red'});
            })
        }
    </script>
    </body>
    </html>

    3、如下代码会出现什么问题以及解决方式?

    |||-begin

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <script data-main="../resource/main" src="../resource/require.js"></script>
    </head>
    <body>
    <button onclick="test()">测试</button>
    <script>
      require(['jquery'], function ($) {
          $('body').css({'backgroundColor': 'red'});
      })
    </script>
    </body>
    </html>

    |||-end

    问题:require.js加载完之后,main.js的加载和下面的script中的代码会同时运行,所以会出现jquery找不到的情况(就是运行到下面代码的时候jquery还没来得及加载)
    解决方式:加载main.js的代码可以放到加载require.js后面
    原理:main.js中是放置的配置,执行的代码放在配置的代码之后就可以解决问题
    <script src="../resource/require.js"></script>
    <script src="../resource/main.js"></script>

    4、require.js自定义模块实例?

    - 前一个参数表示依赖的模块,这里依赖jquery,回调函数里面就写模块定义的函数
    - 使用的时候会将define中return部分的值给b,所以b.change()就可以执行
    define(['jquery'], function () {
        return {
            change: function () {
                $('body').css({'backgroundColor': 'red'});
            },
            show: function () {
                alert('后盾人')
            },
            message: function () {
                alert('houdunren.com')
            }
        }
    });
    
    使用
    <script>
    require(['util'],function(b){
        b.change();
    })
    </script>

    5、自定义模块引用依赖的两种方式?

    + 当后面所有的方法都需要jquery的时候,可以在define中引入:define(['jquery'], function () {
    + 只有某个方法需要jquery的时候,就在某个方法里面引入:require(['jquery'],function($){
    当后面所有的方法都需要jquery的时候,可以在define中引入
    define(['jquery'], function () {
        return {
            change: function () {
                $('body').css({'backgroundColor': 'red'});
            },
        }
    });
    
    只有某个方法需要jquery的时候,就在某个方法里面引入
    define([], function () {
        return {
            change: function () {
                require(['jquery'],function($){
                $('body').css({'backgroundColor': 'red'});
            })
            },
        }
    });

    6、require.js如何解决多个模块之间的依赖关系(比如bootstrap需要依赖jquery,还有css)?

    在shim中:'bootstrap': { 'deps': ['jquery', 'css!../css/bootstrap.min.css', 'css!../css/font-awesome.min.css'] }
    require.config({
        baseUrl: '../resource/app',
        paths: {
            'css': '../lib/css.min',
            'bootstrap': '../lib/bootstrap.min',
        },
        shim: {
            'bootstrap': {
                'deps': ['jquery', 'css!../css/bootstrap.min.css', 'css!../css/font-awesome.min.css']
            }
        }
    });
    
    'css': '../lib/css.min' 是因为后面bootstrap需要引css,所以要把css库加进来

    7、bootstrap库依赖jquery,后面比如自定义模块util.js依赖bootstrap,那么util加载的时候也会自动加载jquery库么?

    会:会加载这些依赖的库,无论直接依赖还是间接依赖

    8、非标准化的AMD的模块怎么使用?

    exports或者init
    /app/hd.js
    function modal() {
        alert('后盾人 modal');
    }
    function success() {
        alert('后盾人 success');
    }
    
    main.js
    require.config({
        baseUrl: '../resource/app',
        paths: {
            'hd': 'hd',
        },
        shim: {
            'hd': {
                // exports: 'modal',
                init: function () {
                    return {
                        modal: modal,
                        success: success,
                    }
                }
            },
        }
    });
    
    
    页面
    <script>
    require(['hd'],function(f){
        f.modal();
    })
    </script>

    9、标准化的AMD模块长什么样?

    define定义,return返回:define(['bootstrap'], function () {
    define(['bootstrap'], function () {
        return {
            change: function () {
                $('body').css({'backgroundColor': 'red'});
            },
            show: function () {
                alert('后盾人')
            },
            message: function () {
                alert('houdunren.com')
            }
        }
    });

    10、老的版本的jquery不是标准化的AMD模块,那么require.js怎么引用?

    因为只有一个$对象,所以直接exports: '$'即可
    require.config({
        baseUrl: '../resource/app',
        paths: {
            'jquery': 'jquery',
        },
        shim: {
            'jquery': {
                exports: '$',
            },
        }
    });

    二、后盾网requireJS课程

    代码地址:链接:https://pan.baidu.com/s/1ztIk2BQL0XWJWUQXBMsnFw
    提取码:53ln

    1、目录结构

    2、代码

    配置main.js

    require.config({
        baseUrl: '../resource/app',
        paths: {
            'hd': 'hd',
            'css': '../lib/css.min',
            'jquery': '../lib/jquery.min',
            'angular': '../lib/angular.min',
            'bootstrap': '../lib/bootstrap.min',
        },
        shim: {
            'hd': {
                // exports: 'modal',
                init: function () {
                    return {
                        modal: modal,
                        success: success,
                    }
                }
            },
            //houdunren.com
            'bootstrap': {
                'deps': ['jquery', 'css!../css/bootstrap.min.css', 'css!../css/font-awesome.min.css']
            }
        }
    });
    // require(['jquery', 'angular'], function ($, angular) {
    //     $('body').css({'backgroundColor': 'red'});
    // })

    自定义模块app/hd.js

    function modal() {
        alert('后盾人 modal');
    }
    function success() {
        alert('后盾人 success');
    }

    自定义模块app/util.js

    define(['bootstrap'], function () {
        return {
            change: function () {
                $('body').css({'backgroundColor': 'red'});
            },
            show: function () {
                alert('后盾人')
            },
            message: function () {
                alert('houdunren.com')
            }
        }
    });

    1、加载require.js

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <script data-main="../resource/main" src="../resource/require.js"></script>
    </head>
    <body>
    
    </body>
    </html>

    2、require.js简单实例

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <script data-main="../resource/main" src="../resource/require.js"></script>
    </head>
    <body>
    <button onclick="test()">测试</button>
    <script>
        function test() {
            require(['jquery', 'angular'], function ($, angular) {
                $('body').css({'backgroundColor': 'red'});
            })
        }
    </script>
    </body>
    </html>

    3、异步加载实例

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <script src="../resource/require.js"></script>
        <script src="../resource/main.js"></script>
    </head>
    <body>
    <button onclick="test()">测试</button>
    <script>
        //        function test() {
        //            require(['jquery', 'angular'], function ($, angular) {
        //                $('body').css({'backgroundColor': 'red'});
        //            })
        //        }
        //    require(['lib/jquery.min', 'lib/angular.min'], function () {
        //        $('body').css({'backgroundColor': 'red'});
        //    })
    
        require(['jquery', 'angular'], function ($, angular) {
            $('body').css({'backgroundColor': 'red'});
        })
    </script>
    </body>
    </html>

    问题:require.js加载完之后,main.js的加载和下面的script中的代码会同时运行,所以会出现jquery找不到的情况(就是运行到下面代码的时候jquery还没来得及加载)
    解决方式:加载main.js的代码可以放到加载require.js后面
    原理:main.js中是放置的配置,执行的代码放在配置的代码之后就可以解决问题

    4、自定义模块

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <script src="../resource/require.js"></script>
        <script src="../resource/main.js"></script>
    </head>
    <body>
    <script>
    require(['util'],function(b){
        b.change();
    })
    </script>
    </body>
    </html>

    5、非AMD标准化的模块

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <script src="../resource/require.js"></script>
        <script src="../resource/main.js"></script>
    </head>
    <body>
    <script>
    require(['hd'],function(f){
        f.modal();
    })
    </script>
    </body>
    </html>
     
  • 相关阅读:
    Echarts实现区级行政区划地图
    webpack4.x开发环境配置
    说说说vue.js中的组
    原生JS实现购物车功能详解
    面向对象的一些重要的基本概念
    Lucene教程
    开启事务时mybatis返回主键id
    生成二维码的方法,基于zxing
    mysql判断一条记录是否存在,如果存在,则更新此语句,如果不存在,则插入
    一:验证微信的Token
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/11593493.html
Copyright © 2011-2022 走看看