深入理解Angular应用结构

本文是Angular系列教程的延续,如果还没有阅读第一部分,请先阅读。在第一部分中,了解了Angular 5的更新内容以及如何设置第一个Angular 5应用。本文将讨论一些关键文件和应用概览,包括组件、声明、模块、提供者等要点。阅读完本文后,将对Angular项目结构有一个基本的了解,并知道在项目中哪些是真正重要的。希望喜欢这篇文章。

尽管Angular 5与之前的版本拥有相同的项目架构,但仍将解释一些关键元素,以便初学者能够跟随本系列教程。如果是一位经验丰富的专业人士,也不会介意。感谢理解。

理解Angular应用

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.cssapp.component.htmlapp.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文件夹中。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485