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

如今页面的复杂度极高,需要加载的脚本文件极多,降低了用户体验,所以写了这个动态加载脚本的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中书写的默认路由及路由,我们知道,页面打开的时候它会跳转到默认路由,也就是会加载上面的所有页面及脚本。

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值