AngularJS+RequireJs实现动态加载JS和页面的方案研究

      摘要:本文是笔者研究了几天的动态加载方案的成果,前台使用的是AngularJS+RequireJs+angular-ui-router+angularAMD。后台使用了SpringMVC+Spring。

1、入口页面

存放地址:src/main/webapp/WEB-INF/view/workflow/workflow.jsp



	  
	
	
	
    
    
	


这里是公共头部

这里是公共尾部

在上面引入了requirejs

2、app.js

require.config({
    paths: {
        "angular": "../angular/1.5.3/angular.min",
        "angular-messages":"../angular/1.5.3/angular-messages.min",
        "angular-locale_zh-cn":"../angular/1.5.3/angular-locale_zh-cn",
        "angular-ui-router": "../bower_components/angular-ui-router/release/angular-ui-router",
        "angularAMD": "../bower_components/angularAMD/angularAMD",
        "ngload": "../bower_components/angularAMD/ngload",
        "sweetalert": "../sweetalert/sweetalert.min",
        "uiBootstrap": "../angular-ui-bootstrap/1.2.4/ui-bootstrap-tpls-1.2.4.min",
        "commonFunction":"../angularCommon/commonFunction",
        "commonValueAndUrl":"../angularCommon/commonValueAndUrl",
        "workFlowCommonModule":"../angularCommon/workFlowCommonModule"
    },
    shim: {        
		"angular": { exports: "angular" },
        "workFlowCommonModule": ["angular"],
        "angular-messages": ["angular"],
        "angular-locale_zh-cn": ["angular"],
        "commonValueAndUrl": ["commonFunction"],
        "angular-ui-router": ["angular"],
		"uiBootstrap": ["angular-ui-router"],
        "angularAMD": ["angular"],
        "ngload": ["angularAMD"]
    }
});
define(["angular", "angularAMD", "angular-ui-router","sweetalert","uiBootstrap","angular-messages","angular-locale_zh-cn","commonFunction","commonValueAndUrl","workFlowCommonModule"], function (angular, angularAMD) {
    var registerRoutes = function($stateProvider, $urlRouterProvider) {
        $urlRouterProvider.otherwise("/home");
        $stateProvider.state("home", angularAMD.route({
                url: "/home",
                templateUrl: "../static/js/workflow-view/home-view.js",
                controllerUrl: "../static/js/workflow/home.js"
            }))
            .state("about", angularAMD.route({
                url: "/about",
                templateUrl: "../static/js/workflow-view/about-view.js",
                controllerUrl: "../static/js/workflow/about.js"
            }))
        ;   		
    };        
    var app = angular.module("app", ["ui.router",'ui.bootstrap','ngMessages','commonModule']);
    app.config(["$stateProvider", "$urlRouterProvider", registerRoutes]);
    app.controller('baseCtrl',function($scope,$uibModal,sendAjaxFactory) {
    	$scope.baseClick = function () {
    		swal("测试按钮")
    	}
    });
    return angularAMD.bootstrap(app);
});

在这里引入了一些需要的模块,其中就一些模块是笔者我自己写的。有的是第三方插件的

这里特别注意,由于SpringMVC会拦截.jsp结尾的文件。所以动态加载 的页面笔者都写到js文件中。如上面的about-view.js和home-view.js.其要动态加载的js文件分别 为about.js和home.js。如果不使用SpringMVc。那么动态加载的页面就可以不用写到js文件中(笔者 的工程中配置了拦截.jsp文件,不拦截.js文件)

3、动态加载的内容:

home.js

define(['app'], function(app)
{
	app.controller('HomeViewController',
    ['$scope',function($scope) {
		document.getElementById("test").onclick = function(){
			swal($scope.title);
        }
	    $scope.title = "Home Home Home Home";
        }
    ]);
});

home-view.js

{{ title }}


温馨提示:带 *为必填项

用户名不能为空
商户类型不能为空
商户注册全名不能为空
所属行业不能为空
合作模式不能为空
合作区域不能为空



about.js:

define(['app'], function(app)
{
	app.controller('AboutViewController',
    ['$scope',function($scope) {
		document.getElementById("test").onclick = function(){
			swal($scope.title);
        }
	    $scope.title = "About About About About";
        }
    ]);
});
其对应的页面内容about-view.js:

{{ title }}

温馨提示:带 *为必填项 

已失效或终止的合同不能再修改内容!

已生效的合同只能修改部分内容!

商户不能为空
合同签订日期不能为空
合同签署人不能为空
合同生效日期不能为空
合同失效日期不能为空
到期自动续签不能为空
自动续签期限不能为空
特殊分期要求不能为空

4、效果展示:

首先进入主页

AngularJS+RequireJs实现动态加载JS和页面的方案研究_第1张图片

看看其加载的js文件,可以看到只加载 了home.js和home-view.js文件

AngularJS+RequireJs实现动态加载JS和页面的方案研究_第2张图片

再点击about按钮,加载about页面,可以看到加载了about.js和about-view.js文件


AngularJS+RequireJs实现动态加载JS和页面的方案研究_第3张图片

然后是页面

AngularJS+RequireJs实现动态加载JS和页面的方案研究_第4张图片

你可能感兴趣的:(AngularJs)