angular+require前端项目架构搭建

app //应用入口
directive //自定义指令
require-main //require的主配置文件 存放公共调用的js
service //请求后端数据公有类
controllers所有ctrl文件
|--fun //存放公有ctrl 例如上传逻辑ctrl
require-main.js
requirejs.config({
    baseUrl: '/',
    paths: {
        'jquery': '/lib/jquery/1.9.1/jquery.min',
        'angular': '/lib/angular/angular.min',
        'angular-file-upload': '/lib/angular/angular-file-upload',
        'app': '/js/angular-base/app',
        'directive': '/js/angular-base/directive',
        'services': '/js/angular-base/services',
        'uploadCtrl': '/js/angular-base/controllers/fun/uploadCtrl',
        'explainCheckListCtrl': '/js/angular-base/controllers/explainCheckListCtrl',
        'storyCheckListCtrl': '/js/angular-base/controllers/storyCheckListCtrl',
        'explainOrderListCtrl': '/js/angular-base/controllers/explainOrderListCtrl',
        'payOrderListCtrl': '/js/angular-base/controllers/payOrderListCtrl'
    },
    shim: {
        'angular': {
            deps: ["jquery"],
            exports: 'angular',
        },
        'angular-file-upload': {
            deps: ["angular"],
            exports: 'angular-file-upload'
        }
    }
});
requirejs([
    'angular',
    'jquery',
    'angular-file-upload',
    'app',
    'services',
    'directive',
    'uploadCtrl'
], function (angular) {
    console.log('angular.bootstrap(document, ["ljkjApp"]);  ok !');
    angular.bootstrap(document, ["ljkjApp"]);
});
app.js
define(['angular'], function (angular) {
    /*
        author:zzd
        description:angularJs common module
    */
    var app = angular.module("ljkjApp", ['angularFileUpload']);
    app.value("pageIndex", 1);
    app.value("pageSize", 10);
    app.constant("configParam", "constant value");
    /*
        author:zzd
        description:config $location request param
    */
    app.config(function ($locationProvider) {
        $locationProvider.html5Mode({
            enabled: true,
            rewriteLinks: false
        }).hashPrefix('!');
    });
    return app;
});
service.js
define(['angular', 'app'], function (angular, app) {
    /*
        author:zzd
        description:http request
    */
    app.factory('ljkjHttp', function ($http, $log, $q) {
        return {
            paramData: {
                "cmd": "VisitnetWork",
                "param": "",
                "Name": "",
                "function": "",
                "languageId": "1",
                "downLoadCmd": "{4}",
                "timeout": 60000 * 10
            },
            get: function () {
                // the $http API is based on the deferred/promise APIs exposed by the $q service
                // so it returns a promise for us by default
                //避免引用变量重置
                var sendParams = angular.copy(this.paramData);
                return $http.post("/Handler/YjlyHandler.ashx", sendParams, { timeout: sendParams.timeout, params: sendParams })
                      .then(function (response) {
                          if (typeof response.data === 'object') {
                              switch (response.data.state.toString()) {
                                  case '1'://error info
                                      $log.error(response.data.msg);
                                      $log.error(response.data.ErrorInfo);
                                      break;
                                  case '6'://login invalid
                                      layer.alert(response.data.msg, { icon: 2 }, function (index) {
                                          window.open('/', '_top');
                                      });
                                      break;
                              }
                              // success response
                              return $q.resolve(response.data);
                          } else {
                              // invalid response
                              return $q.reject(response.data);
                          }
                      }, function (response) {
                          // something went wrong
                          $log.error(response);
                          return;
                      });
            }
        };
    });
});
ctrl.js 示例代码
define(['angular', 'app', 'jquery'], function (angular, app, $) {
    app.controller('homeCtrl', function (ljkjHttp, $scope, $location, $q) {
        //Banner 加载完成后执行代码
        $scope.$on('ngRepeatFinishedEvent', function (ngRepeatFinishedEvent) {
            var mySwiper = new Swiper('.swiper-container', {
                direction: 'horizontal',
                loop: true,
                // 如果需要分页器
                pagination: '.swiper-pagination'
            });
        });
        //通过id选择本地图标
        var getIcon = function (id, TemplateID) {
            var icon = "";
            TemplateID = TemplateID == 1 ? "" : TemplateID;
            switch (id) {
                case 1:
                    icon = "img/jiangjie" + TemplateID + ".png";
                    break;
                case 2:
                    icon = "img/huodong" + TemplateID + ".png";
                    break;
                case 3:
                    icon = "img/zixun" + TemplateID + ".png";
                    break;
                case 4:
                    icon = "img/pinglun" + TemplateID + ".png";
                    break;
                case 5:
                    icon = "img/ditu" + TemplateID + ".png";
                    break;
                case 6:
                    icon = "img/shipin" + TemplateID + ".png";
                    break;
                case 7:
                    icon = "img/meishi" + TemplateID + ".png";
                    break;
                case 8:
                    icon = "img/zhusu" + TemplateID + ".png";
                    break;
                case 9:
                    icon = "img/WIFI" + TemplateID + ".png";
                    break;
                case 10:
                    icon = "img/daolantu" + TemplateID + ".png";
                    break;
            }
            return icon;
        }
        var initBanner = function () {
            ljkjHttp.paramData.param = {
                Sid: $location.search().id
            };
            ljkjHttp.paramData.Name = "IFrAppBannerList";//version
            ljkjHttp.paramData.function = "FrOfficialWeb";//cmd
            ljkjHttp.get()
                .then(function (resData) {
                    if (resData.state == 0) {
                        $scope.banners = angular.fromJson(resData.value);
                    }
                });
        }
        var initModel = function (TemplateID) {
            ljkjHttp.paramData.param = {
                Sid: $location.search().id
            };
            ljkjHttp.paramData.Name = "IFrAppModularList";//version
            ljkjHttp.paramData.function = "FrOfficialWeb";//cmd
            ljkjHttp.get()
                .then(function (resData) {
                    if (resData.state == 0) {
                        $scope.models = angular.fromJson(resData.value);
                        for (var item in $scope.models) {
                            $scope.models[item]["icoUrl"] = getIcon($scope.models[item].ModularId, TemplateID);
                        }
                    }
                });
        }
        var initTemplate = function () {
            var delay = $q.defer();
            ljkjHttp.paramData.param = {
                Sid: $location.search().id
            };
            ljkjHttp.paramData.Name = "IFrGetTemplateBySid";//version
            ljkjHttp.paramData.function = "FrOfficialWeb";//cmd
            ljkjHttp.get()
                .then(function (resData) {
                    if (resData.state == 0) {
                        var obj = angular.fromJson(resData.value);
                        //微信浏览器中修改title
                        document.title = obj[0].Name;
                        var $body = $('body');
                        var $iframe = $('<iframe src="/favicon.ico"></iframe>');
                        $iframe.on('load', function () {
                            setTimeout(function () {
                                $iframe.off('load').remove();
                            }, 0);
                        }).appendTo($body);
                        delay.resolve(obj[0].TemplateID);
                    }
                }, function (error) {
                    delay.reject(error);
                });
            return delay.promise;
        }
        initBanner();
        initTemplate().then(function (res) {
            $scope.TemplateID = res;
            initModel($scope.TemplateID);
        });
    });
});
每一个html页面只需要引入自身 ctrl js文件即可
<script>
require([
'controllers/explainCheckListCtrl'
]);
</script>
angular+require前端项目架构搭建的更多相关文章
- mvc项目架构搭建之UI层的搭建
		项目架构搭建之UI层的搭建 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构各部分解析 5.项目创 ... 
- [Vue 牛刀小试]:第十六章 - 针对传统后端开发人员的前端项目框架搭建
		一.前言 在之前学习 Vue 基础知识点的文章中,我们还是采用传统的方式,通过在 html 页面上引用 vue.js 这个文件,从而将 Vue 引入到我们的项目开发中.伴随着 Node.js 的出现, ... 
- c#项目架构搭建经验
		读过.Net项目中感觉代码写的不错(备注1)有:bbsMax(可惜唧唧喳喳鸟像消失了一样),Umbraco(国外开源的cms项目),Kooboo(国内做开源cms).本人狭隘,读的代码不多,范围也不广 ... 
- Luffy之前端项目部署搭建
		1. 搭建前端项目 1.1 创建项目目录 cd 项目目录 vue init webpack lufei 根据需要在生成项目时,我们选择对应的选项, 效果: 根据上面的提示,我们已经把vue项目构建好了 ... 
- 微服务SpringCloud项目架构搭建入门
		Spring的微服务框架SpringCloud受到众多公司欢迎,给大家带来一篇框架搭建入门.本次采用的版本是Spring Cloud版本为Finchley.RELEASE. 一.SpringCloud ... 
- Vue前端项目的搭建流程
		1. 安装Vue和Nodejs 2. 创建项目 vue create eduonline-web 
- mvc项目架构分享系列之架构搭建之Repository和Service
		项目架构搭建之Repository和Service的搭建 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4. ... 
- mvc项目架构分享系列之架构搭建之Infrastructure
		项目架构搭建之Infrastructure的搭建 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构 ... 
- mvc项目架构分享系列之架构搭建初步
		mvc项目架构分享系列之架构搭建初步 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构各部分解析 ... 
随机推荐
- HTML meta refresh 刷新与跳转(重定向)页面
			下面为各位整理了一些HTML meta refresh 刷新与跳转(重定向)页面的例子吧,后面本站长自己也补充了一些js页面刷新与跳转例子吧. refresh 属性值 -- 刷新与跳转(重定向)页 ... 
- oracle11g安装教程(注意事项及图文教程)
			Oracle安装与重装注意事项 1.安装oracle(**) 注意:安装Oracle之前确定自己的主机(计算机)名要保证计算机名是英文的. 1.oracle的安装文件不要放在含有中文的目录当中,如:d ... 
- SQLServer分页查询模板
			SELECT TOP 10 * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY id) AS RowNumber,* FROM ERPTelFile ) A WHE ... 
- 006-接收键盘的输入(read)
			read -ptns 变量名 -p 在等待read输入的时候,显示的提示信息 -t 秒数,read等待用户输入的时间 -n read接收用户输入的字符数,只接收指定字符数,就会执行 -s 隐藏输 ... 
- 20170510 mysql导入导出csv
			一开始没加FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' 导致导出的csv没有进行分 ... 
- JSTL遇到的问题
			1.jstl 中不可以用关键字命名 例如class new. 2.jstl取值的问题 如果jstl通过对象.属性取值 属性值中包括特殊字符(例如:31/20180131195356867.txt&qu ... 
- php与HTML交互问题
			1.将表单中的action属性值设为PHP路径,则网页会跳转到这个网址 <html> <body> <form action="welcome.php" ... 
- .NET 异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消
			今天记录一下异步多线程的进阶历史,以及简单的使用方法 主要还是以Task,Parallel为主,毕竟用的比较多的现在就是这些了,再往前去的,除非是老项目,不然真的应该是挺少了,大概有个概念,就当了解一 ... 
- GitHub For Beginners: Don’t Get Scared, Get Started
			It's 2013, and there's no way around it: you need to learn how to use GitHub.2 Why? Because it's a s ... 
- java 多维数组遍历
			java 多维数组遍历的顺序的性能问题 ps:下图为java多维数组内存分布原理.出自:http://math.hws.edu/javanotes/c7/two-dimensional-array.p ... 
