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.项目架构各部分解析 ...
随机推荐
- C语言第二次实验报告
1.实验题目 题1:11-7 找鞍点(20 分) 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点 题2: ...
- destoon各栏目调用汇总
================================================================== destoon各栏目调用汇总 ================== ...
- ios开发 第一天
alloc 分配内存(类方法) init 调用构造函数 id可以替代任何数据类型(不加*号) 错误现象: 2013-06-27 21:44:21.769 FieldButtonFun[3465:113 ...
- Java之IO流学习总结【下】
2.字节流 |-- InputStream(读) |-- OutputStream(写) 由于字节是二进制数据,所以字节流可以操作任何类型的数据,值得注意的是字符流使用的是字符数组char[]而字节流 ...
- 监控服务器ssh登录,并发送报警邮件
最近想监控下云主机的ssh登录情况,所以开始写ssh登录报警监控.实现方式并不难. 一:邮箱申请开启SMTP 在邮箱中选择“设置”----->“账户” 在如下图处开启POP3/SMTP服务,并生 ...
- Performance Testing 入门小结
从事软件测试两年多了,一直在做功能测试.2016年计划学习Performance.今天,先把之前听过的同事session以及自己查阅的资料小结一下. 一.什么是性能测试 首先来说一下软件的性能是什么. ...
- P2045 方格取数加强版
P2045 方格取数加强版 题目描述 给出一个n*n的矩阵,每一格有一个非负整数Aij,(Aij <= 1000)现在从(1,1)出发,可以往右或者往下走,最后到达(n,n),每达到一格,把该格 ...
- Java进阶篇(五)——Java的I/O技术
程序中,为了永久的保存创建的数据,需要将其保存在磁盘文件中,以便在其它程序中使用它们.Java的I/O技术可以将数据保存到文本文件.二进制文件甚至是ZIP压缩文件中,以达到永久性保存数据的要求. 本篇 ...
- JVM-类的四种载入方式
package org.burning.sport.javase.classloader; public class ClassLoaderMain { public static void main ...
- linux_网站计量单位
IP 独立IP数,是不同IP地址的计算机访问网站时被计算的总次数,独立IP数是衡量网站流量的一个重要指标,一般一天内相同IP地址的客户端访问网页只被计算为一次,记录独立IP的时间为一天或一个月,目前通 ...