BlueXIII's Blog

热爱技术,持续学习

0%

Angular学习笔记

参考资料

官网

书籍

教程

其它

开发环境

检查node及npm环境

1
2
node -v #>10.9.0, v12.12.0
npm -v #6.13.4

安装angular-cli

卸载

1
2
3
ng -v  # 6.0.8
npm uninstall -g @angular/cli
npm cache clean --force

安装

1
2
npm install -g @angular/cli@6.0.3   #指定版本
npm install -g @angular/cli@latest #最新版本9.0.3,向下兼容

命名规则

  • 文件名采用 feature.type .** , feature 表示特性, type 表示类型
  • 模块用 .module.ts
  • 路由模块用 .routing.module.ts
  • 组件用 .component.ts|html|css
  • 服务用 .service.ts
  • 管道用 .pipe.ts
  • 指令用 .directive.ts
  • 类型用 .model.ts
  • 数据用 .data.ts
  • 文件名、包名采用小写
  • 单词之前中横线分隔
  • 类名首字母大写
  • 方法名、变量名驼峰命名

DEBUG

  • Augury: Angular专用的chrome 调试插件
  • Sources调试
  • WebStorm + JetBrains IDE Support

新建工程

1
2
ng new hello-angular --skip-install
npm install/yarn install

使用cnpm可能产生一些未知问题,慎用
如启动server时遇到rxjs错误,可将版本号固定为6.0.0

新建组件

1
2
3
ng generate component login --inline-template --inline-style

ng g c login -it -is

新建服务

1
ng g s todo/todo

引入组件

app.component.html

1
2
3
4
<h1>
{{title}}
</h1>
<app-login></app-login>

InMemoryWebApiModule

https://segmentfault.com/a/1190000009898540

HttpClient

https://www.jianshu.com/p/350ef028b798

Observable

Angular 6 + Rxjs 6

https://stackoverflow.com/questions/50571550/this-property-fromevent-does-not-exist-on-type-typeof-observable-angular-6

json server

1
2
npm install -g json-server
json-server ./src/app/todo/todo-data.json

mdl

https://medium.com/codingthesmartway-com-blog/angular-material-and-angular-6-material-design-for-angular-6b1a3ee476f0

1
2
npm install --save angular2-mdl
ng add @angular/material

关于模块的最佳实践

Angular团队对于共享特性模块有如下建议

  • 坚持在shared目录中创建名叫SharedModule的特性模块(例如在app/shared/shared.module.ts中定义SharedModule)。
  • 坚持把可能被应用其它特性模块使用的公共组件、指令和管道放在SharedModule中,这些资产倾向于共享自己的新实例(而不是单例)。
  • 坚持在SharedModule中导入所有模块都需要的资产(例如CommonModule和FormsModule)。
  • 坚持在SharedModule中声明所有组件、指令和管道。
  • 坚持从SharedModule中导出其它特性模块所需的全部符号。
  • 避免在SharedModule中指定应用级的单例服务提供商。但如果是故意设计的单例也可以,不过还是要小心。
  • 很显然,我们的共享模块还没有全部做到,大家可以作为练习自己试验一下。

同样的对于核心特性模块,官方的建议是

  • 坚持把那些“只用一次”的类收集到CoreModule中,并对外隐藏它们的实现细节。简化的AppModule会导入CoreModule,并且把它作为整个应用的总指挥。
  • 坚持在core目录下创建一个名叫CoreModule的特性模块(例如在app/core/core.module.ts中定义CoreModule)。
  • 坚持把一个要共享给整个应用的单例服务放进CoreModule中(例如ExceptionService和LoggerService)。
  • 坚持导入CoreModule中的资产所需要的全部模块(例如CommonModule和FormsModule)。
  • 坚持把应用级、只用一次的组件收集到CoreModule中。 只在应用启动时从AppModule中导入它一次,以后再也不要导入它(例如NavComponent和SpinnerComponent等)。
  • 坚持从CoreModule中导出AppModule需导入的所有符号,使它们在所有特性模块中可用。
  • 坚持防范多次导入CoreModule,并通过添加守卫逻辑来尽快失败。
  • 避免在AppModule之外的任何地方导入CoreModule

jsbin

TS

Rxjs

组件自定义样式

1
2
3
@Component({
styleUrls: ['./regist.component.less']
})

1
2
3
4
5
6
7
8
9
10
@Component({
styles: [
`
nz-select {
margin-right: 8px;
width: 120px;
}
`
]
})