angular入门

初始化Angular项目


先决条件

  • nodejs
  • npm

安装Angular CLI

在使用Angular CLI初始化Angular项目前, 需要全局安装Angular CLI:

npm install -g @angular/cli

创建工作区

使用Angular CLI创建angular项目工作目录

ng new angular-app

创建好之后, 工作区包含了:

  1. 一个命名为angular-app的新的工作区
  2. 在/src目录下,初始化的项目架构
  3. 一个end-to-end测试项目(/e2e目录)
  4. 相关的配置文件

该工作区初始化完成后为Welcome app, 直接可以运行

启动项目

工作区初始化完毕之后, 可以使用Angular CLI命令本地启动该项目.

首先到工作区目录下, 然后运行以下命令:

ng serve –open

使用该方式启动项目后, 会监测你的代码变动, 一旦有更新, 项目会重新构建, 前端页面也会显示最新的变动.

工作区目录文件解析


在初识化项目中, 包含了许多工作区级别的配置文件, 本节将简要介绍每个文件的作用.

工作区配置文件 目的
.editorconfig 编辑器的相应配置(缩进, 编码, 换行符等), 参考 EditorConfig.
.gitignore git仓库的忽略文件列表
angular.json 项目中默认的CLI配置, 包含了构建, 启动和测试的配置选项, 参考Angular项目配置.
node_modules npm本地包的存放位置
package.json npm包依赖配置文件
tsconfig.json 当前项目默认的TypeScript配置, 参考TypeScript Configuration.
tslint.json 默认的tslint代码检查配置文件
README.md 项目的介绍文档

在该工作区的所有项目会共享CLI配置上下文,某个特定项目的TypeScript, TSLint配置文件会继承上级的tsconfig.*.json, tsline.json.

src目录下包含了主要的源文件(app逻辑, 数据, 和assets), 以及初识的项目配置文件

app源/配置文件 目的
app/ 包含了项目中的组件文件, 即项目的主要逻辑和数据定义.参考App source folder
assets/ 包含了在构建app时需要拷贝的图像或其他资源文件
environments/ 包含了为不同环境的不同构建配置选项
browserlist 配置各种前端工具之间的目标浏览器和node.js版本的共享.参考Browserlist on GitHub
favicon.ico 在浏览器书签栏的图标
index.html 入口HTML页面. 当构建项目时, Angular CLI会自动添加所有js/ts和css文件到该文件下
main.ts 项目的入口点,默认使用JIT编译器编译应用程序, 并引导程序的根模块在浏览器中运行, 也可以使用—aot参数让项目通过AOT编译器
polyfills.ts 提供用于浏览器支持的polyfill脚本
styles.scss 列出为项目提供样式的CSS文件,扩展名反映了您为项目配置的样式预处理器。
test.ts 单元测试的入口点, 具有部分Angular特定的配置

e2e目录下存放了e2e测试相关文件:

my-app/
  e2e/                  (端到端测试文件)
    src/                (app source files)
    protractor.conf.js  (test-tool config)
    tsconfig.e2e.json   (TypeScript config inherits from workspace tsconfig.json)

Project目录下存放了其他的apps和libs

  projects/           (additional apps and libs)
    my-other-app/     (a second app)
      src/
      (config files)
    my-other-app-e2e/  (corresponding test app) 
      src/
      (config files)
    my-lib/            (a generated library)
      (config files)

在src/文件夹中, app/文件夹包含应用程序的逻辑和数据, 组件, 模板和样式在这里. 资产/子文件夹包含图像以及您的应用所需的任何其他内容. src/ support顶层的文件测试和运行你的应用程序.

app源文件 目的
app/app.component.ts 定义应用程序根组件的逻辑,名为AppComponent。在向应用程序添加组件和服务时,与此根组件关联的视图将成为视图层次结构的根。
app/app.component.html 定义与根AppComponent关联的HTML模板。
app/app.component.css 定义根AppComponent的基本CSS样式表。
app/app.component.spec.ts 定义根AppComponent的单元测试。
app/app.module.ts 定义名为AppModule的根模块,它告诉Angular如何组装应用程序。最初只声明AppComponent。当您向应用添加更多组件时,必须在此处声明它们。
assets/* 包含要在构建应用程序时按原样复制的图像文件和其他资源文件。

Angular API


Input与Output

Input将父作用域的值“输入”到子作用域中,然后子作用域进行相关处理。

Output相当于指令的方法绑定,子作用域触发事件执行响应函数,而响应函数方法体则位于父作用域中,相当于将事件“输出到”父作用域中,在父作用域中处理。

example:

//app.component.html
<app-child [values]="data" (childEvent) = "getChildEvent($event)">
</app-child>

//app.component.ts
@Component({
 selector: 'app-root',
 templateUrl: './app.component.html',
 styleUrls: ['./app.component.css']
})
export class AppComponent {
 data = [1,2,3];

 getChildEvent(index){
  console.log(index);
  this.data.splice(index,1);
 }
}
//app-child.component.html
<p *ngFor="let item of values; let i = index" (click)="fireChildEvent(i)">
 {{item}}
</p>


//app-child.component.ts
@Component({
 selector: 'app-child',
 templateUrl: './child.component.html',
 styleUrls: ['./child.component.css']
})
export class ChildComponent implements OnInit {
 @Input() values;
 @Output() childEvent = new EventEmitter<any>();
 constructor() { }

 ngOnInit() {

 }
 fireChildEvent(index){
  this.childEvent.emit(index);
 }
}

[NgModal]与[(NgModal)]

[(NgModal)]是Angular的双向绑定语法, [NgModal]则是单向绑定,[(ngModel)]="overRideRate" 相当于是[ngModel]="overRideRate" (ngModelChange)="overRideRate = $event"

Note: 当使用[(NgModal)]绑定input时, 需要在对应的app.module.ts文件下添加FormsModule:

import {FormsModule} from '@angular/forms';
...
    imports: [
          ...
          FormsModule
    ],
...