angular8教程(1)-了解项目结构

在开始阅读我这个系列教程之前,强烈建议想学习angular框架的先通读一遍中文版官方文档,并且搭建好开发环境。这个系列教程的示例代码会基于我的另一个系列教程Springboot入门教程中的后台代码,所以有条件的话最好先把后台的代码跑起来。
预备环境:Node.js 版本 10.9.0 或更高版本,并且安装了安装 Angular CLI。

首先我们利用angular cli创建一个新项目,在命令行运行ng new angular-schoolmanager-cli
创建的时候有两个需要选择:1. 是否导入angular的route模块,选是,2. 选择样式的文件类型,推荐选择scss,当然也可以用最常见的css。


创建新项目

angular cli是官方的脚手架工具,可以帮助我们自动构建一个基于angular框架的前端项目框架,自动引入了angular相关的各个库。所以等命令行下载完所有依赖库,我们就可以直接用npm start来运行这个项目了。

下面我依然推荐用IntelliJ IDEA来作为开发工具,2019以上的版本对angular的支持很好,可以用快捷的菜单自动创建angular的组件。并且用idea打开我们创建的angular项目之后,可以看到开发工具已经为我们配置好了启动项。


启动配置

然后我们来简单了解一下这个项目结构,这样我们就知道应该从哪开始着手编写代码了。


angular cli项目结构

e2e目录,这个是作为e2e测试时使用的,我们暂时不用看。
node_modules目录,这个目录下放的是下载的依赖库,如果熟悉nodejs的就会知道,nodejs中的npm工具可以根据配置的依赖库名称和版本找寻对应的库并下载到这个目录下面,这个就类似于java中的maven或gradle的自动导入依赖包的功能。

src目录,这个自然就是项目代码的主目录了,这个后面再说。
其余的下面的那些文件其实我们都不用过多关注,那些都是angular cli官方为我们配置好的,不需要修改。唯一需要注意的一个是package.json这个文件,我们可以打开看一下


package.json

我们可以看到,这个文件里面包含了项目名称,版本。scripts是npm命令对应的ng脚本命令,例如
"start": "ng serve"表示npm start命令,对应的是ng server就是启动项目服务器,所以我上面说的是用npm start来启动项目,而官方文档上是用ng serve,用的就是同一个命令。dependencies就是配置的依赖库的名称及版本号,在你运行npm install命令的时候,会根据这里的配置自动下载对应的库,如果需要引入新的库,可以在这里添加之后再运行npm install。devDependencies是开发环境下需要依赖的库,一般不需要特别修改。

再回来看src目录,因为angular官方推荐使用typescript作为标准开发语言,所以这个目录下面的大部分都是typescript的文件。
app目录,是整个项目的核心目录,后面我们需要编码都是在这里面添加修改。这里创建项目的时候默认创建了根模块app,我们下面再分析。
assets,类似于android开发中的assets目录,用来存放一些原始的静态文件,例如图片文件等。
environments,用来配置不同环境的,默认有开发和生产两个环境的配置文件。
index.html,因为angular cli构建的是单页应用,所以只有一个html文件,所有页面都会被渲染到这个html中。
main.ts,项目的主入口,可以看到里面引入了app这个根模块。
styles.scss,全局的样式文件,在这里面写的样式会被应用到整个项目中。
test.ts,单元测试的入口。

再来看app目录,angular项目是模块化(module)的,叫作NgModule,每个项目至少有一个根模块,就是这里的appmodule,我们先看app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

这里定义了一个AppModule,其中由这几个部分构成
declarations,声明了该模块中的各个组件(component),现在只有一个AppComponent,后续如果创建了新的组件,需要在这里声明。
imports,引入的模块,可以是在这个项目中创建的模块,也可以是引入的第三方库的模块,都在这边引入。
providers,贡献的全局服务,我的理解是不属于组件的其他类别的公共服务,如log的模板。
bootstrap,这里引用一下官方的说法“应用的主视图,称为根组件。它是应用中所有其它视图的宿主。只有根模块才应该设置这个 bootstrap 属性。”

以app.component命名的都是AppComponent这个组件的相关文件,其中
app.component.html是模板视图文件,里面都是用html标签构成的视图,当然除了标准的html标签,angular还支持一些扩展型的标签和语法。
app.component.ts,里面是AppComponent组件的逻辑代码,我们看一下这个代码

import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent {
  title = 'angular-schoolmananger-cli';
}

@Component注释代表的是这个类是一个组件,其中
selector表示这个组件应用到html标签时的名称,我们可以看到在index.html中就引入了这个标签<app-root></app-root>。
templateUrl就是这个组件引用的模板文件,即app.component.html。
styleUrls就是这个组件引用的样式文件,即app.component.scss,在这个样式文件中引用的样式只会在该组件中生效,这个文件目前是空的,如果不需要的话也可以删除。
class AppComponent中定义了一个变量title,说明所有关于这个组件的逻辑代码都要在这里添加。app.component.html和app.component.ts的关系就有点类似于android开发中xml布局文件和activity的关系,因为angular同样也是遵循mvc架构模式的框架。
最后还有一个app-routing.module.ts,这个文件是在项目创建时第一个选择路由为是的时候创建的,里面包含了项目的路由模块,这个我们下一篇教程再详细讲述。

这篇教程中我简单介绍了一下整个angular项目的基本结构,挑出了一些需要重点关注的部分做了分析,具体想要更清楚的知道项目的结构内容的还是请参考官方文档项目文件结构

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342