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前端项目架构搭建的更多相关文章

  1. mvc项目架构搭建之UI层的搭建

    项目架构搭建之UI层的搭建 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构各部分解析 5.项目创 ...

  2. [Vue 牛刀小试]:第十六章 - 针对传统后端开发人员的前端项目框架搭建

    一.前言 在之前学习 Vue 基础知识点的文章中,我们还是采用传统的方式,通过在 html 页面上引用 vue.js 这个文件,从而将 Vue 引入到我们的项目开发中.伴随着 Node.js 的出现, ...

  3. c#项目架构搭建经验

    读过.Net项目中感觉代码写的不错(备注1)有:bbsMax(可惜唧唧喳喳鸟像消失了一样),Umbraco(国外开源的cms项目),Kooboo(国内做开源cms).本人狭隘,读的代码不多,范围也不广 ...

  4. Luffy之前端项目部署搭建

    1. 搭建前端项目 1.1 创建项目目录 cd 项目目录 vue init webpack lufei 根据需要在生成项目时,我们选择对应的选项, 效果: 根据上面的提示,我们已经把vue项目构建好了 ...

  5. 微服务SpringCloud项目架构搭建入门

    Spring的微服务框架SpringCloud受到众多公司欢迎,给大家带来一篇框架搭建入门.本次采用的版本是Spring Cloud版本为Finchley.RELEASE. 一.SpringCloud ...

  6. Vue前端项目的搭建流程

    1.  安装Vue和Nodejs 2.  创建项目 vue create eduonline-web

  7. mvc项目架构分享系列之架构搭建之Repository和Service

    项目架构搭建之Repository和Service的搭建 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4. ...

  8. mvc项目架构分享系列之架构搭建之Infrastructure

    项目架构搭建之Infrastructure的搭建 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构 ...

  9. mvc项目架构分享系列之架构搭建初步

    mvc项目架构分享系列之架构搭建初步 Contents 系列一[架构概览] 0.项目简介 1.项目解决方案分层方案 2.所用到的技术 3.项目引用关系 系列二[架构搭建初步] 4.项目架构各部分解析 ...

随机推荐

  1. C语言第二次实验报告

    1.实验题目 题1:11-7 找鞍点(20 分) 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点    题2: ...

  2. destoon各栏目调用汇总

    ================================================================== destoon各栏目调用汇总 ================== ...

  3. ios开发 第一天

    alloc 分配内存(类方法) init 调用构造函数 id可以替代任何数据类型(不加*号) 错误现象: 2013-06-27 21:44:21.769 FieldButtonFun[3465:113 ...

  4. Java之IO流学习总结【下】

    2.字节流 |-- InputStream(读) |-- OutputStream(写) 由于字节是二进制数据,所以字节流可以操作任何类型的数据,值得注意的是字符流使用的是字符数组char[]而字节流 ...

  5. 监控服务器ssh登录,并发送报警邮件

    最近想监控下云主机的ssh登录情况,所以开始写ssh登录报警监控.实现方式并不难. 一:邮箱申请开启SMTP 在邮箱中选择“设置”----->“账户” 在如下图处开启POP3/SMTP服务,并生 ...

  6. Performance Testing 入门小结

    从事软件测试两年多了,一直在做功能测试.2016年计划学习Performance.今天,先把之前听过的同事session以及自己查阅的资料小结一下. 一.什么是性能测试 首先来说一下软件的性能是什么. ...

  7. P2045 方格取数加强版

    P2045 方格取数加强版 题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格 ...

  8. Java进阶篇(五)——Java的I/O技术

    程序中,为了永久的保存创建的数据,需要将其保存在磁盘文件中,以便在其它程序中使用它们.Java的I/O技术可以将数据保存到文本文件.二进制文件甚至是ZIP压缩文件中,以达到永久性保存数据的要求. 本篇 ...

  9. JVM-类的四种载入方式

    package org.burning.sport.javase.classloader; public class ClassLoaderMain { public static void main ...

  10. linux_网站计量单位

    IP 独立IP数,是不同IP地址的计算机访问网站时被计算的总次数,独立IP数是衡量网站流量的一个重要指标,一般一天内相同IP地址的客户端访问网页只被计算为一次,记录独立IP的时间为一天或一个月,目前通 ...