一、Angular Module
    1、angular 模块是一个类,它需要NgModule这个装饰器函数接受一个原数据对象作为参数来描述这个模块类属性。
    其中最重要的属性有:
        declarations:声明当前模块的组件、指令和管道
        exports:declarations的子集,可用于其他模块的组件模版
        imports:当前模块声明的组件模板需要的类所在的其他模块
        providers:服务的创建者,并加入到全局服务列表,可用于应用任何部分
        bootstrap:指定应用的主视图也称为根组件,它是所有其他视图的宿主,只有根模块才能设置这个属性。
二、组件
        负责控制视图
        通过一些由属性和方法组成的API与视图交互
        当用户在这个应用中漫游时,angular会创建、更新和销毁组件。应用可以通过生命周期钩子在组件生命周期的各个时间点插入自己的操作。如ngOnInit()
三、模版
        模版由<div><h2>等这样的典型html元素以及*ngFor、 {{hero.name}}、 (click) 、[hero] 、<hero-detail></hero-detail>等angular模版语法自由组合
四、元数据
        修饰类
        总结:向代码中添加元数据,以便angular知道该怎么做
五、数据绑定
        插值表达式:{{item.name}} <li>{{hero.name}}</li>
        属性绑定:[hero] <hero-detail [hero]="selectedHero"></hero-detail>
        事件绑定:(click)<li (click)="selectHero(hero)"></li>
        双向绑定:([ngModel])=‘item.name’;ngModel指令组合了属性绑定和事件绑定功能  <input [(ngModel)]="hero.name">
六、指令
        组件也是指令的一种
        结构性指令(修改布局):*ngFor、*ngIf、ngSwitch...
        属性型指令(修改DOM元素等):ngModel、ngStyle、ngClass
七、服务
        angular的基础
        组件是最大的服务消费者
        相对来说,组件本身不从服务器获取数据、不进行验证输入,也不直接往控制台写日志,这些都应该委托给服务
        使用原则:把应用逻辑拆分到服务,并通过依赖注入在组件中使用服务
八、依赖注入
        依赖注入是提供类的新实例等一种方式,大多数依赖都是服务;
        angular通过查看构造函数的参数类型得知组件需要哪些服务;
        服务可以注册到根模块上,以便任何地方都使用服务的同一个实例,也可以注册到某个组件里,则表示该组件的每一个新实例都会有一个服务的新实例。