zoukankan      html  css  js  c++  java
  • AMD 模块化开发 requirejs route等

    闭包模块化

    • 模块化的基本实现
      • 闭包的自调用函数
    // 闭包实例
    var fn = function(){
        var a = 10;
        return {
            init(){
                a++;
                console.log(a);
            }
        }
    }
    var f1 = new fn();
    var f2 = new fn();
    f1.init();
    f1.init();
    f2.init();
    
    // 闭包应用
    var KTV=(function(){
        return {
            pay(){
    
            },
            total(){
    
            }
        }
    })()
    

    AMD模块化

    • 概念
      • AMD:async module define:异步模块定义
      • AMD其实就是requireJS实现的模块化解决方案

    requireJS

    • 中文网

      • http://www.requirejs.cn/docs/api.html#jsfiles
    • 基本使用

      • 文件夹目录
        • index.html
        • main.js
        • js
          • 02.js
          • 03.js
          • 04.js
          • lib
            • jquery-3.3.1.js
            • require.js
    <!-- index.html -->
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script data-main='main' src='./js/lib/require.js'></script>
    </head>
    <body>
        <button id="user">点我</button>
        <button id="begin">初始化</button>
    </body>
    </html>
    
    // main.js
    require.config({
        // baseUrl 配置模块基础路径
        baseUrl: './js',
        // paths 常用来配置一些常用的文件,文件夹路径
        paths: {
            jquery: 'lib/jquery-3.3.1'
        }
    })
    
    require(['jquery', '03', '02', '04'], function($, three, two, four){
        $('body').append('<div>逻辑思维</div>');
        var btnUser = document.querySelector('#user');
        var btnBegin = document.querySelector("#begin");
        btnUser.onclick = function(){
            three();
            two();
        }
        btnBegin.onclick = function(){
            four.init();
            four.begin();
        }
    })
    
    // 02.js
    define([], function(){
        return function(){
            console.log('我是老二');
        }
    })
    
    // 03.js
    define(['02'], function(two) {
        return function(){
            console.log('我是老三');
            two();
        }
    });
    
    // 04.js
    define([], function(){
        return {
            init(){
                console.log('老四,初始化');
            },
            begin(){
                console.log('老四,开工了')
            }
        }
    })
    
    • 若是组件函数没有返回值
      • 形参中 a,,c
      • 形参中 b=''

    案例——模块依赖子模块

        //productAdd.js
        define([],function(){
            return {
                init(){
                    console.log("添加商品");
                }
            }
        })
        //productEdit.js
        define([],function(){
            return {
                init(){
                    console.log("编辑商品");
                }
            }
        })
        //product.js
        define(["productAdd","productEdit"],function(productAdd,productEdit){
            return {
                init(){
                    console.log("商品列表");
                },
                add(){
                    productAdd.init();
                },
                edit(){
                    productEdit.init();
                }
            }
        })
        //首页:
        require(["product"],function(product){
            product.init();
            product.add();
            product.edit();
        })
    

    检测第三方库是否支持AMD规范

    • 搜索源码
    if ( typeof define === "function" && define.amd ) {
        define([], function() {
            return jQuery;
        } );
    }
    

    常用的模块、文件夹路径的配置

    • 一般用于配置第三方模块,比如jquery、bootstrap、zepto等等
    require.config(
        paths:{
            jquery:"js/lib/jquery-1.11.min",
            zepto:"js/lib/zepto.min",
            bootstrap:"assets/bootstrap/js/bootstrap.min"
        }
    )
    define(["jquery","zepto"],function($,$$){
    
    })
    require(["jquery","bootstrap"],function($){
    
    })
    
    • 目录结构
      • dist 编译存放目录
      • src 业务存放目录
        • css
        • imgs
        • assets
          • bootstrap
        • js
          • lib
            • require.js
            • jquery.js
        • index.html
        • app.js

    requirejs解决循环依赖

    • 场景描述

      • index.js 已经依赖了组件 add.js
      • 但是 add.js 也需要依赖 index.js 时
      • 发生循环依赖
      • 此时,不要通过回调函数的形参获取返回值
    • 解决方案

      • 在组件 add.js 中,需要执行组件 index.js 时
      • 以 require()的方式解决
      • require('index')()
    define(['jquery', 'service/salemanService', 'require', 'saleman/index'], function($, salemanService, require) {
        return function(){
            var addStr = `
                <form>
                    <label>姓名:</label><input type='text' name='name'>
                    <label>年龄:</label><input type='number' name='age'>
                    <button type='submit'>提交</button>
                </form>
            `;
            var $add = $(addStr)
            $add.on('submit', function(e){
                e.preventDefault();
                // 数据获取
                var name = $(this).find('input[name=name]').val();
                var age = $(this).find('input[name=age]').val();
                // 调用数据页面的方法,将数据传入
                salemanService.addList(name, age);
                // 页面刷新
                // $(".aside .aside-item:eq(0)").trigger("click");
                // 循环调用,页面刷新
                require('saleman/index')();
            });
            $('#main .content').html($add);
        }
    });
    

    AMD插件

    • 插件网址
      • https://github.com/requirejs/requirejs/wiki/Plugins

    路由

    前端路由的意义

    • 通过路由将各个功能从url上面就分辨出来了

      • /user/list
      • /user/3
      • /user/edit/3
    • 路由还可以进行前进、后退等导航操作

    前端路由的实现方式

    • 监听window对象的hashchange事件

      • hash值:通过localtion.hash获取,获取的值以"#"开头
      • 也可以通过localtion.hash来设置hash值,当然设置的新hash也应该以"#"开头
    • history对象:popState/pushState

    ES6模块化

    • 浏览器调试
    <script type="module">
        //导入模块
    </script>
    
    • 基本用法
    //cart.js
    export default {
        name:"张三",
        age:18
    }
    
    //index.js
    import cart from "cart.js"
    cart.name
    cart.age
    
    • 导出模块
    //cart.js
    export const age = 18;
    export function f1(){
        console.log("f1函数");
    }
    export default {
        init(){
            console.log("初始化");
        }
    }
    //index.js
    import cart,{ age,f1 } from "cart.js"
    cart.init();
    age,
    f1();
    
    • 导入模块
    //index.js
    import cart as cartIndex from "cart.js"
    import { age as AGE } from "product.js"
    
    //使用变量:cartIndex
    //使用变量:AGE
    
  • 相关阅读:
    Asp.net与SQL一起打包部署安装(收集)
    算法:计算1的个数
    安装oracle817后出现的问题
    DataTime.ToString 的方法。
    历史上最经典智力题
    困惑,个人资源管理混乱不堪。
    Test for this blog
    转:一个硕士应届生的面试总结.(很精彩,特别是具体的各公司面试信息)
    太强了,不转不行,学习JAVA必备!(转载)
    可定制个性化页面JS(转)
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/13829799.html
Copyright © 2011-2022 走看看