Angular2.0的项目架构

一、项目服务端app

  1. a) Controller控制器
  2. b) Router路由
  3. c) Service服务
  4. d) Public公共样式及脚本和图片等静态资源
  5. e) View静态页面
  6. f) Engine公共的配置文件及方法
  7. g) Extend框架扩展
  8. h) Middleware编写中间件

二、项目客户端src

  1. a) App
  2. i. App.component.ts 组件
  3. 1.baAmChart.component.ts
  4. 2.装饰器@Component({})
  5. a) Selector
  6. b) templateUrl
  7. c) styleUrls
  8. d) Providers(特殊情况也可以引入其他组件,例如元标签)
  9. 3.Typescript
  10. a) Constructor(依赖注入){}
  11. b) @Input() 声明一个输入属性,并且绑定到模板(父组件向子组件传值)
  12. c) @Output() 声明一个输出口属性,绑定到某个可以绑定的事件 (子组件向父组件广播事件,触发改变当前页面的事件)
  13. d) @ViewChild() 将第一个组件视图查询得到的子组件绑定到当前元素(是属性装饰器,用来从模板视图中获取匹配的元素。在父组件的 ngAfterViewInit 生命周期钩子中才能成功获取通过 ViewChild 查询的元素)
  14. e) @ViewChildren() 将当前根据视图查询到的子组件的列表绑定到当前元素(用来从模板视图中获取匹配的多个元素,返回的结果是一个 QueryList 集合。)
  15. f) @ContentChild() 将第一个可以查到的组件内容对象绑定到当前属性(是属性装饰器,用来从通过 Content Projection 方式 (ng-content)设置的视图中获取匹配的元素,在父组件的 ngAfterContentInit 生命周期钩子中才能成功获取通过 ContentChild 查询的元素)
  16. g) @ContentChildren() 将当前根据视图查询到的子组件内容对象绑定到当前属性(属性装饰器用来从通过 Content Projection 方式 (ng-content) 设置的视图中获取匹配的多个元素,返回的结果是一个 QueryList 集合。)
  17. h) @HostListener()  是属性装饰器,用来为宿主元素及其它对象产生的事件添加事件监听。
  18. i) @HostBinding() 将某个元素属性绑定到某个指令或者组件的属性
  19. j)
  20. 注意:
  21. 1、在 Root Component 中无法使用 ng-content
  22. 2Angular2 编译器不会处理 index.html 文件中设置的绑定信息,另外出于安全因素考虑,为了避免 index.html 中的 {{}} 插值,被服务端使用的模板引擎处理。
  23. k) NgOnChanges(){} 当被绑定的输入属性的值发生变化时调用,首次调用一定会发生在 ngOnInit之前。
  24. l) NgOnit(){} 在第一轮 ngOnChanges 完成之后调用。 ( 译注:也就是说当每个输入属性的值都被触发了一次 ngOnChanges 之后才会调用 ngOnInit ,此时所有输入属性都已经有了正确的初始绑定值 )
  25. m) ngDoCheck(){} 在每个 Angular 变更检测周期中调用。
  26. n) ngAfterContentInit(){} 当把内容投影进组件之后调用。
  27. o) ngAfterContentChecked(){} 每次完成被投影组件内容的变更检测之后调用。
  28. p) ngAfterViewInit(){} 初始化完组件视图及其子视图之后调用。
  29. q) ngAfterViewChecked(){} 每次做完组件视图和子视图的变更检测之后调用。
  30. r) ngOnDestroy(){} Angular 每次销毁指令 / 组件之前调用。
  1. import { Component, ViewChild, Input, Output, ElementRef, EventEmitter } from '@angular/core';
  2. import { BaThemePreloader } from '../../../theme/services';
  3. import 'amcharts3';
  4. import 'amcharts3/amcharts/plugins/responsive/responsive.js';
  5. import 'amcharts3/amcharts/serial.js';
  6. import 'ammap3';
  7. import 'ammap3/ammap/maps/js/worldLow';
  8. import { BaAmChartThemeService } from './baAmChartTheme.service';
  9. @Component({
  10. selector: 'ba-am-chart',
  11. templateUrl: './baAmChart.html',
  12. styleUrls: ['./baAmChart.scss'],
  13. providers: [BaAmChartThemeService]
  14. })
  15. export class BaAmChart {
  16. @Input() baAmChartConfiguration: Object;
  17. @Input() baAmChartClass: string;
  18. @Output() onChartReady = new EventEmitter<any>();
  19. @ViewChild('baAmChart') public _selector: ElementRef;
  20. constructor(private _baAmChartThemeService: BaAmChartThemeService) {
  21. this._loadChartsLib();
  22. }
  23. ngOnInit() {
  24. AmCharts.themes.blur = this._baAmChartThemeService.getTheme();
  25. }
  26. ngAfterViewInit() {
  27. let chart = AmCharts.makeChart(this._selector.nativeElement, this.baAmChartConfiguration);
  28. this.onChartReady.emit(chart);
  29. }
  30. private _loadChartsLib(): void {
  31. BaThemePreloader.registerLoader(new Promise((resolve, reject) => {
  32. let amChartsReadyMsg = 'AmCharts ready';
  33. if (AmCharts.isReady) {
  34. resolve(amChartsReadyMsg);
  35. } else {
  36. AmCharts.ready(function () {
  37. resolve(amChartsReadyMsg);
  38. });
  39. }
  40. }));
  41. }
  42. }
  1. ii.App.module.ts 模块
  2. 1.List.module.ts
  3. 2.装饰器@NgModule({})
  4. a) Imports 导入其他模块及路由
  5. b) Declarations 导入模块内部的组件、管道、指令,声明这个模块的内部成员
  6. c) Exports 暴露给外部使用的模块内部成员(组件、管道、指令)
  7. d) entryComponents 输入组件 指定了这个模块启动的时候应该启动的组件(如果正常的组件必须要有标签,而定义了输入组件可以不用)
  8. e) Providers 指定应用程序根级别使用的服务
  9. f) Bootstrap app启动的根组件
  10. 3.TypeScript
  1. import { NgModule } from '@angular/core';
  2. import { CommonModule } from '@angular/common';
  3. import { NgaModule } from '../../theme/nga.module';
  4. import { NgbModalModule } from '@ng-bootstrap/ng-bootstrap';
  5. import { HttpModule } from '@angular/http';
  6. import { FormsModule, ReactiveFormsModule } from '@angular/forms';
  7. import { routing } from './list.routing'; // 路由
  8. import { List } from './list.component';
  9. import { ListService } from './list.service'; // 服务
  10. import { Common } from '../common/common.module';
  11. import { ListModal, ListTable, Paging } from './components';
  12. @NgModule({
  13. imports: [
  14. CommonModule,
  15. NgaModule,
  16. NgbModalModule,
  17. ReactiveFormsModule,
  18. FormsModule,
  19. HttpModule,
  20. routing,
  21. Common
  22. ],
  23. declarations: [
  24. List,
  25. ListTable,
  26. ListModal,
  27. Paging
  28. ],
  29. providers: [
  30. ListService
  31. ],
  32. entryComponents: [
  33. ListModal
  34. ]
  35. })
  36. export class ListModule { }
  1. iii.App.routing.ts 路由
  2. 1.Pages.routing.ts
  3. 2.子路由 RouterModule.forChild(routes)
  4. 3.辅助路由 <router-outlet name=”aux”></router-outlet>
  5. 4.路由守卫
  6. 5.根路由 RouterModule.forRoot(routes)
  7. 6.路由占位符 <router-outlet></router-outlet>
  8. 7.路由链接 [routerLink] = “[‘./home’]”
  1. import { Routes, RouterModule } from '@angular/router';
  2. import { Pages } from './pages.component';
  3. import { ModuleWithProviders } from '@angular/core';
  4. export const routes: Routes = [
  5. {
  6. // 交易中心系统路由
  7. path: 'trade',
  8. component: Pages,
  9. children: [
  10. { path: '', redirectTo: 'ips/0', pathMatch: 'full' },
  11. { path: 'ips', loadChildren: './ips/ips.module#IpsModule' },
  12. { path: 'ips/:type', loadChildren: './ips/ips.module#IpsModule' },
  13. { path: 'domain', loadChildren: './domain/domain.module#DomainModule' },
  14. { path: 'lines', loadChildren: './lines/lines.module#LinesModule' },
  15. { path: 'list', loadChildren: './list/list.module#ListModule' },
  16. { path: 'sub/:id', loadChildren: './sub/sub.module#SubModule' },
  17. { path: 'subTrades/:id', loadChildren: './trades/trades.module#TradesModule' },
  18. { path: 'subRegisters/:id', loadChildren: './registers/registers.module#RegistersModule' }
  19. ]
  20. }];
  21. export const routing: ModuleWithProviders = RouterModule.forChild(routes);
  1. iv.App.service.ts 服务
  2. 1.baThemeSpinner.service.ts
  3. 2.装饰器@Injectable()
  4. 3.TypeScript
  5. a) Constructot(){}
  6. b) 调用node层的服务的接口
  1. import {Injectable} from '@angular/core';
  2. @Injectable()
  3. export class BaThemeSpinner {
  4. private _selector:string = 'preloader';
  5. private _element:HTMLElement;
  6. constructor() {
  7. this._element = document.getElementById(this._selector);
  8. }
  9. public show():void {
  10. this._element.style['display'] = 'block';
  11. }
  12. public hide(delay:number = 0):void {
  13. setTimeout(() => {
  14. this._element.style['display'] = 'none';
  15. }, delay);
  16. }
  17. }
  1. v.App.component.scss 组件样式
  2. vi.App.component.html 组件模板
  3. vii.指令
  4. 1.baScrollPosition.directive.ts
  1. import {Directive, Input, Output, EventEmitter, HostListener} from '@angular/core';
  2. @Directive({
  3. selector: '[baScrollPosition]'
  4. })
  5. export class BaScrollPosition {
  6. @Input() public maxHeight:number;
  7. @Output() public scrollChange:EventEmitter<boolean> = new EventEmitter<boolean>();
  8. private _isScrolled:boolean;
  9. public ngOnInit():void {
  10. this.onWindowScroll();
  11. }
  12. @HostListener('window:scroll')
  13. onWindowScroll():void {
  14. let isScrolled = window.scrollY > this.maxHeight;
  15. if (isScrolled !== this._isScrolled) {
  16. this._isScrolled = isScrolled;
  17. this.scrollChange.emit(isScrolled);
  18. }
  19. }
  20. }
  1. viii.管道
  2. 1.baAppPicture.pipe.ts
  1. import {Pipe, PipeTransform} from '@angular/core';
  2. import {layoutPaths} from '../../../theme';
  3. @Pipe({name: 'baAppPicture'})
  4. export class BaAppPicturePipe implements PipeTransform {
  5. transform(input:string):string {
  6. return layoutPaths.images.root + input;
  7. }
  8. }
  1. ix. 验证
  2. 1. Email.validator.ts 邮箱验证
  1. import {AbstractControl} from '@angular/forms';
  2. export class EmailValidator {
  3. public static validate(c:AbstractControl) {
  4. let EMAIL_REGEXP = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  5. return EMAIL_REGEXP.test(c.value) ? null : {
  6. validateEmail: {
  7. valid: false
  8. }
  9. };
  10. }
  11. }
  1. 2.
  2. b) Assets 静态资源文件
  3. c) Environments 环境配置
  4. d) Meta seo优化文件
  5. i. Robots.txt
  6. e) Index.html 浏览器入口
  7. f) Main.ts 脚本入口
  8. g) Polyfills.ts 向下兼容版本文件
  9. h) Tsconfig.app.ts typeScript的配置文件
  10. i) Styles.scss 全局的样式

三、项目配置config

  1. a) Config.default.js 默认配置(生产)
  2. b) Config.local.js 本地配置(开发=本地+默认)
  3. c) Config.prod.js 生产配置
  4. d) Config.test.js 测试配置
  5. e) Plugin.js 插件配置

四、项目java层

五、项目数据库

Angular2.0的项目架构的更多相关文章

  1. angular2.0 官网架构文档

    Angular 是一个用 HTML 和 JavaScript 或者一个可以编译成 JavaScript 的语言(例如 Dart 或者 TypeScript ),来构建客户端应用的框架. 该框架包括一系 ...

  2. angular2.0入门---webStorm创建angular CLI项目

    创建项目之前需要先安装angular cli,(angular是用typescript编写的,所以先安装typescript,再安装angularjs-cli).打开命令窗口输入 npm instal ...

  3. Webstorm 下的Angular2.0开发之路

    人一旦上了年纪,记忆力就变得越来越不好. 最近写了许多的博文,倒不是为了给谁看,而是方便自己来搜索,不然一下子又忘记了. 如果恰巧帮助到了你,也是我的荣幸~~~~~~~~~~~~ 废话不多说,看正题~ ...

  4. 从零搭建vue3.0项目架构(附带代码、步骤详解)

    前言: GitHub上我开源了vue-cli.vue-cli3两个库,文章末尾会附上GitHub仓库地址.这次把2.0的重新写了一遍,优化了一下.然后按照2.0的功能和代码,按照vue3.0的语法,完 ...

  5. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入

    上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...

  6. Mvc项目架构分享之项目扩展

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

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

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

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

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

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

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

随机推荐

  1. powerdesinger(MSSQLSRV2008测试通过)通过Name或comment 导出注释到sql脚本,生成sql的说明备注,包括表注释信息

    导出字段信息name注释到sql2008字段的说明 在database -> edit current dbms -> MSSQLSRV2008::Script\Objects\Colum ...

  2. ASP.NET Core Web API 最小化项目

    ASP.NET Core中默认的ASP.NET Core 模板中有Web API 模板可以创建Web API项目. 有时,只需要创建一个API,不需要关心Razor,本地化或XML序列化.通过删除无用 ...

  3. h1b期间回国须知

    今天才搞明白几点 1. visa 和 status 是两个不同的东西,status能保证合法在美国.visa能保证合法进入美国 所以,h1b十月份的身份转换时status的转换,如果回国还需要重新办h ...

  4. Echarts展示百分比的问题

    22.echarts 想要自定义tooltip 的百分比的时候,可以在formatter中console.log(params); 当鼠标移动到y轴的时候会触发输出;

  5. vue实现对表格数据的增删改查

    在管理员的一些后台页面里,个人中心里的数据列表里,都会有对这些数据进行增删改查的操作.比如在管理员后台的用户列表里,我们可以录入新用户的信息,也可以对既有的用户信息进行修改.在vue中,我们更应该专注 ...

  6. Frameset框架集的应用

    Frameset框架集常用于写网站后台页面,大多数"T字型"布局后台页面,就是应用Frameset框架集来做的.Franeset框架集的优点是,他可以在同浏览器窗口显示不同页面内容 ...

  7. Linux基础(四)

    一.系统监控 1.用top命令实时监测CPU.内存.硬盘状态 效果类似Windows的任务管理器,默认每5秒刷新一下屏幕上的显示结果. [root@localhost /]# top top - 17 ...

  8. AngularJS $compile动态生成html

    angular.module('app') .directive('compile', function ($compile) { return function (scope, element, a ...

  9. 查看ubuntu的内核版本&获取roo…

    1.查看内核版本命令 [root@AY130616190837708391Z ~]# cd .. (管理员权限) [root@AY130616190837708391Z /]# cd proc [ro ...

  10. 表达式求值(栈方法/C++语言描述)(三)

    代码清单 // calculator.h #ifndef CALCULATOR_H #define CALCULATOR_H #include <stack> #include <s ...