AngularJs、RequireJs、AngularAMD、ui-router搭建的JS文件动态加载

2023-11-11

如今页面的复杂度极高,需要加载的脚本文件极多,降低了用户体验,所以写了这个动态加载脚本的demo,欢迎交流:

1. 主页:requireJs 入口:data-main="mian.js",如下: 

<!DOCTYPE HTML>
<head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="../lib/bootstrap/css/bootstrap.min.css">
  <script type="text/javascript" data-main="main.js" src="../lib/requireJs/2.1.20/require.min.js"></script>
</head>
<body>
    <div ui-view></div>
</body>
</html>

2. main.js

require.config({
    baseUrl : '/AngularJsClass/app',//脚本加载的相对路径,后面的动态加载脚本都是相对于这个路径写的,如果您非要写全路径,
可以忽略这个路径,但是您在加载的时候得书写完整,如:加载js文件:/AngularJsClass/app/views/main/rightList/rightList.js
忽略baseUrl的写法:"views/main/rightList/rightList"
未忽略:"/AngularJsClass/app/views/main/rightList/rightList.js"
注意上面的区别,这点很重要,要不然会出现无法动态加载脚本的尴尬。
    paths : {//依赖的模块
        "angular" : "/AngularJsClass/lib/angular/angular.min",
        "angularAMD" : "/AngularJsClass/lib/angularAMD/angularAMD.min",
        "ngLoad" : "/AngularJsClass/lib/angularAMD/ngload.min",
        "angularUiRouter" : "/AngularJsClass/lib/uiRouter/0.2.15/angular-ui-router.min",
    },
    shim : {//模块的依赖关系,这个决定了加载的优先级
        "angular" : {
            experts : "angular",
        },
        "angularUiRouter" : {
            deps : ["angular"],
            experts : "angularUiRouter"
        },
        "angularAMD" : {
            deps : ["angular"],
            experts : "angularAMD",
        },
        "ngLoad" : {
            deps : ["angularAMD"],
            experts : "ngLoad"
        }
    },
    deps : ['app']//启动应用
});

3. app.js 

define(['angularAMD','angularUiRouter','angular','ngLoad'],function (angularAMD){

    var app = angular.module('app',['ui.router']);

    app.run(function($rootScope,$state,$stateParams){
        $rootScope.$state = $state;
        $rootScope.$stateParams = $stateParams;
    });

    app.config(function($stateProvider,$rootScopeProvider,$urlRouterProvider,$controllerProvider){//路由
        $urlRouterProvider.otherwise('/main/index');//页面默认路由
        $stateProvider
            .state('main',angularAMD.route({
                url : '/main',
                templateUrl : '../app/views/main/main.html'
            }))
            .state('main.index',angularAMD.route({
                url : '/index',
                views : {
                    'rightList@main' : angularAMD.route({
                        templateUrl : 'views/main/rightList/rightList.html',
                        controller : 'rightListController',
                        controllerUrl : 'views/main/rightList/rightList',//对应第一点的未忽略baseURL的写法,上面没看懂可以结合一下看,这里的这个js文件就是动态加载的
                    }),
                    'content@main' : angularAMD.route({
                        templateUrl : 'views/main/content/content.html',
                        controller : 'contentController',
                        controllerUrl : 'views/main/content/content',
                    })
                }
            }))
    });
    return angularAMD.bootstrap(app);
})

 

 

4. main.html

 

<!--代表右侧的导航栏-->
<div ui-view="rightList"></div>
<!--代表页面的内容-->
<div ui-view="content"></div>

由上面app.js中书写的默认路由及路由,我们知道,页面打开的时候它会跳转到默认路由,也就是会加载上面的所有页面及脚本。

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJs、RequireJs、AngularAMD、ui-router搭建的JS文件动态加载 的相关文章

  • 在父指令和子指令之间传递参数

    我有导航菜单的父指令和菜单链接的子指令 像这样的事情 menu menu
  • 如何在单元测试中的请求之间更改 $httpBackend when[method] 语句?

    在我的测试中 我启动一些模型数据并模拟响应 beforeEach function var re new RegExp http users online httpBackend whenGET re respond id 12345 us
  • 使 WebAPI 操作异步?

    我有一个问题 关于在 WebAPI MVC 控制器 AJAX 请求上使用 async await 是否有益 假设我有一个与 Web API 后端对话的 AngularJS 应用程序 并且我想获取一些数据 我对 Web API 进行了一些 A
  • 从 mvc web api httpresponse 生成 csv 并通过 angularjs 接收以供下载

    我正在尝试从我的 Web api 生成一个 CSV 文件并通过 angularjs 接收该文件 我有一个如下所示的 API 控制器 HttpPost public HttpResponseMessage GenerateCSV FieldP
  • AngularJS:理解 $rootScope.$on('$routeChangeSuccess

    我正在开发登录页面 成功后 它会重定向到主页 默认情况下 我显示登录页面以下代码 app run function rootScope location rootScope on routeChangeSuccess function lo
  • AngularJS + jQuery 移动

    是否还有其他可能性来设计AngularJS以移动友好的方式应用程序CSS 我正在计划一个移动应用程序 并希望使用 AngularJS 进行逻辑和数据绑定 但我不想自己设计所有内容CSS The AngularJSFAQ说它使用jQuery
  • AngularJs ng-if 比较日期

    我正在比较 ng 中的两个日期 如果这就是我的玉文件的样子 li list group item ng if app Segments 0 StartDate getTime gt date getTime div row div col
  • Angular 指令,属性更新时不调用链接

    在以下示例中 http plnkr co edit OZjg6sUgl35GIriaabQg p preview http plnkr co edit OZjg6sUgl35GIriaabQg p preview 我有 2 个指令 show
  • “move(-1)”作为 AngularJS 表达式有什么问题吗?

    我收到此错误 parse ueoe Unexpected end of expression move 从这段代码来看
  • 为什么还是filter和orderBy的优点呢?

    看来 AngularJS 确实非常重视在视图中使用过滤器和其他 ng 指令来过滤和排序数据 而不是在模型中手动执行 这有什么原因吗 比如速度更快 有缓存还是其他原因 例如 我想显示一个已排序的列表 但我也想访问已排序的列表以用于与视图无关的
  • 如何将一个“模型”映射到两个字段?

    我有一个具有 高度 属性的模型 我希望允许用户将其编辑为两个单独的字段 英尺 和 英寸 但让它们映射到以英寸为单位测量的单个属性 高度 表格看起来像这样 在这些字段和单个 高度 属性之间创建双向绑定的最佳方法是什么 HTML
  • 在 AngularJS 中动态显示图像

    我正在使用http请求从数据库获取图像的路径 并且图像位于服务器中 我想在 img src 中显示该图像 这是代码 http url user profile exec php method GET params uid user id s
  • 通过隔离范围进行 AngularJS 基于事件的通信

    在 AngularJS 中 一个指令如何使用基于事件的通信 emit broadcast and on 与另一个具有隔离范围的指令进行通信 我创建了两个指令 当从第二个指令中删除隔离范围时 第一个指令能够使用emit 与第二个指令成功通信
  • 监听指令中的表单提交事件

    我想监听指令中提交的表单 假设我有这样的指令 app directive myDirective function return restrict A require form scope smth link function scope
  • Angular 完成渲染后运行 jQuery

    我正在尝试使用 angularjs 中的 json 对象填充个人资料页面 我正在为此使用指令 我有一个配置文件指令 其中包含配置文件部分指令作为子项 配置文件部分具有作为子级的配置文件子部分指令 我需要在 Angular 开始编译之前和 A
  • 获取 Angular ng-option 下拉列表的选定文本

    我的角度代码中有这个下拉列表 div class btn group div
  • 使用 jQuery 值更新 Angular 模型

    您好 我有一个附加在我的模型上的输入字段 当用户手动输入该字段时 会在更改时调用一个函数 这工作正常 并且模型按预期在控制台日志中反映
  • 从 url 角度加载模板并在 div 内编译

    由于我是 Angular JS 的新手 我想知道如何加载外部模板并将其与一些数据一起编译到目标中div 例如我有这个模板
  • 如何使用 Angular Kendo UI 刷新网格数据源

    我使用 Angular Kendo UI 项目将 Telerik Kendo 网格与 Angular 结合起来 我有以下标记 div style height 600px div 以及我的控制器中的以下代码 scope thingsOpti
  • 使用 eclipse IDE 配置 angularjs

    我想开始使用 AngularJs 和 Java Spring 进行开发 我使用 Eclipse 作为 IDE 我想配置我的 Eclipse 以使这些框架无缝工作 我知道我可能要求太多 但相信我 我已经做了很多研究 你们是我最后的选择 任何帮

随机推荐