CommonModule 功能:ngIF NgFor
FormsModule 功能: [(ngModel)]
我应该导入BrowserModule还是CommonModule?
几乎所有要在浏览器中使用的应用的根模块(AppModule
)都应该从@angular/platform-browser
中导入BrowserModule
。
BrowserModule
提供了启动和运行浏览器应用的那些基本的服务提供商。
BrowserModule
还从@angular/common
中重新导出了CommonModule
,这意味着AppModule
中的组件也同样可以访问那些每个应用都需要的Angular指令,如NgIf
和NgFor
。
在其它任何模块中都不要导入BrowserModule
。 特性模块和惰性加载模块应该改成导入CommonModule
。 它们需要通用的指令。它们不需要重新初始化全应用级的提供商。
如果你在惰性加载模块中导入BrowserModule
,Angular就会抛出一个错误。
特性模块中导入CommonModule
可以让它能用在任何目标平台上,不仅是浏览器。那些跨平台库的作者应该喜欢这种方式的。
https://angular.cn/docs/ts/latest/cookbook/ngmodule-faq.html#!#q-what-to-import
2.差異
forChild 給 配置惰性加载模块的路由。
forRoot 配置 根模块 的路由。
3.service provider
1.NgModule 中的提供商是被注册到根注入器的。这意味着任何注册到 NgModule 上的提供商都可以被整个应用访问到
2.另一方面,注册到应用组件上的只在该组件及其各级子组件中可用。
4. @Injectable()标志着一个类可以被一个注入器实例化
5.@optional 可選依賴
可选依赖
HeroService
需要一个Logger
,但是如果想不提供 Logger 也能得到它,该怎么办呢? 可以把构造函数的参数标记为@Optional()
,告诉 Angular 该依赖是可选的:
import { Optional } from '@angular/core';
constructor(@Optional() private logger: Logger) {
if (this.logger) {
this.logger.log(some_message);
}
}
6.route Snapshot
RouterState與RouterStateSnapshot
當我們進行導航的時候,在跳轉完成之後,路由會創建一個RouterStateSnapshot(含義為:路由狀態快照---譯者註)實例。那麼什麼是RouterStateSnapshot呢?它與RouterState有什麼區別呢?
RouteStateSnapshot是一個不可變數據結構,代表瞭路由在某一個特定時刻的狀態。任何時候,隻要增加、刪除瞭組件,或者參數發生瞭改變,就會創建一個新的快照。
7.在ngoninit 每次更新route的service 取得params
要this.route.params.forEach(params=>{let username=params['username']})
8.
CanDeactivate
表示:在使用者離開該路徑前的判斷,剛好跟CanActivate觸發時機相反。
用途:文章編輯一半離開沒存,問是否要離開
9.resolve
Resolve
这跟Angular1中ui-router库的resolve
类似,就是用来在打开一个页面之前先获取数据,而不是进入页面以后再加载。这个接口中的方法,可以返回任意的对象,也可以返回一个Promise
,或者Observable
如果在一个路径上同时设置了CanActivate
和Resolve
,首先CanActivate
接口的方法会被执行,当这个路由可以被激活时,Resolve
接口的方法才会被执行。
http://codin.im/2016/11/12/angular2-route-2-guard-resolve/
10.inclludes javascript
檢查一個字符串包含"world" :
var str = "Hello world, welcome to the universe.";
var n = str.includes("world");
n的結果將是:
true
11.
pure impure pipe
https://www.youtube.com/watch?v=LCBRS_VMsxA
impure當資料變動會持續刷新
pure不為所動
12.
var log = console.log.bind(console);