本文是Angular系列教程的延续,如果还没有阅读第一部分,请先阅读。在第一部分中,了解了Angular 5的更新内容以及如何设置第一个Angular 5应用。本文将讨论一些关键文件和应用概览,包括组件、声明、模块、提供者等要点。阅读完本文后,将对Angular项目结构有一个基本的了解,并知道在项目中哪些是真正重要的。希望喜欢这篇文章。
尽管Angular 5与之前的版本拥有相同的项目架构,但仍将解释一些关键元素,以便初学者能够跟随本系列教程。如果是一位经验丰富的专业人士,也不会介意。感谢理解。
Angular项目拥有清晰的架构,它包含了如下所示的文件夹结构:
将从src/app
文件夹开始开发应用程序,这是应用程序的根文件夹。现在,让看看现有文件中有什么。让打开app.component.ts
文件。
在Angular中,为每个选定的功能创建组件,比如一个用于登录的组件,另一个用于注册,另一个用于导航等,以便每个组件可以单独维护。在每个组件中,有三个部分:
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
title = 'app';
}
导入部分帮助导入框架中已有的功能,如上例中包含了来自Angular/core的Component。装饰部分是装饰组件的地方,给它一个选择器(每个组件都是唯一的),样式UI,提供模板URL指向特定的HTML文件,可以在装饰部分直接包含模板。导出部分包括特定于该组件的自定义TypeScript代码,比如一个类,它持有自己的功能。
接下来让看看app.module.ts
,这是注册所有模块、组件、提供者等的地方。可以将其视为基类。像组件一样,它有一个导入和导出的部分。它还有一个@NgModule
部分,其中包含声明(组件)、导入(模块)、提供者(服务)。
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
不会解释app.component.css
、app.component.html
、app.component.spec.ts
,因为可以通过查看里面的代码来了解它们包含的内容。所以将这部分留给。
如果查看项目文件夹,会看到一个名为Environment
的文件夹。顾名思义,它帮助设置环境配置,比如开发和生产环境等。
index.html
是主页面,从这里调用app-root
,记得设置了app.component
的选择器为app-root
吗?
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>MyAngular5App</title>
<base href="/">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root></app-root>
</body>
</html>
请确保在index.html
文件中给出了<base href="/">
,否则Angular应用会出现错误。
tsconfig.app.json
文件是设置项目配置的地方,比如设置模块版本、编译器选项等。可以看到一个示例文件如下:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"baseUrl": ".",
"module": "es2015",
"types": []
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
如果使用Angular CLI创建了Angular应用,会在项目中看到一个名为.angular-cli.json
的文件。这是所有自定义项目设置所在的地方。
{
"$schema": "./node_modules/@angular/cli/lib/config/schema.json",
"project": {
"name": "my-angular5-app"
},
"apps": [
{
"root": "src",
"outDir": "dist",
"assets": ["assets", "favicon.ico"],
"index": "index.html",
"main": "main.ts",
"polyfills": "polyfills.ts",
"test": "test.ts",
"tsconfig": "tsconfig.app.json",
"testTsconfig": "tsconfig.spec.json",
"prefix": "app",
"styles": ["styles.css"],
"scripts": [],
"environmentSource": "environments/environment.ts",
"environments": {
"dev": "environments/environment.ts",
"prod": "environments/environment.prod.ts"
}
}
],
"e2e": {
"protractor": {
"config": "./protractor.conf.js"
}
},
"lint": [
{
"project": "src/tsconfig.app.json",
"exclude": "**/node_modules/**"
},
{
"project": "src/tsconfig.spec.json",
"exclude": "**/node_modules/**"
},
{
"project": "e2e/tsconfig.e2e.json",
"exclude": "**/node_modules/**"
}
],
"test": {
"karma": {
"config": "./karma.conf.js"
}
},
"defaults": {
"styleExt": "css",
"component": {}
}
}
package.json
文件列出了NPM包,并且每当运行npm install
命令时,这个文件就是命令查找的地方。
{
"name": "my-angular5-app",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"ng": "ng",
"start": "ng serve",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "^5.0.0",
"@angular/common": "^5.0.0",
"@angular/compiler": "^5.0.0",
"@angular/core": "^5.0.0",
"@angular/forms": "^5.0.0",
"@angular/http": "^5.0.0",
"@angular/platform-browser": "^5.0.0",
"@angular/platform-browser-dynamic": "^5.0.0",
"@angular/router": "^5.0.0",
"core-js": "^2.4.1",
"rxjs": "^5.5.2",
"zone.js": "^0.8.14"
},
"devDependencies": {
"@angular/cli": "1.5.0",
"@angular/compiler-cli": "^5.0.0",
"@angular/language-service": "^5.0.0",
"@types/jasmine": "~2.5.53",
"@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60",
"codelyzer": "~3.2.0",
"jasmine-core": "~2.6.2",
"jasmine-spec-reporter": "~4.1.0",
"karma": "~1.7.0",
"karma-chrome-launcher": "~2.1.1",
"karma-cli": "~1.0.1",
"karma-coverage-istanbul-reporter": "^1.2.1",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.1.2",
"ts-node": "~3.2.0",
"tslint": "~5.7.0",
"typescript": "~2.4.2"
}
}
一旦包管理器完成运行install
命令,所有提到的包将被添加到node_modules
文件夹中。