angularJS5笔记

  @Component({
     selector: 'app-heroes', //组件的选择器(css元素选择器),用来在父组件的模板中匹配 HTML 元素的名称,以识别出该组件。
     templateUrl: './heroes.component.html', //组价模板文件的位置
     styleUrls: ['./heroes.component.css'] //组件私有css样式表文件位置
    })


 管道 是格式化字符串、金额、日期和其它显示数据的好办法。
  绑定表达式中的 `[uppercase](https:\\www.angular.cn/api/common/UpperCasePipe)` 位于管道操作符( | )的右边,用来调用内置管道 `UppercasePipe`
  1.<h2>{{hero.name | uppercase}} Details</h2>   ==   WINDSTORM

 双向绑定
  1.[(ngModel)]是Angular的双向数据绑定语法。

AppModule
  1.Angular需要知道如何把应用程序的各个部分组合到一起, 以及该应用需要哪些其他文件和库. 这些信息被称为元数据(Metadata)
  2.有一些元数据位于@Component装饰器中,可以把它加到组件类上。另一些关键性元数据位于@NgModule装饰器中。
  3.@NgModule装饰器位于顶级类AppModule上。
  4.Angular CLI在创建项目的时候在src/app/aoo.module.ts中生成了一个AppModule类。在这里导入FormsModule类。(就跟Java导包一样)

声明 HeroesComponent
  1.每个组件都必须声明在(且只能声明在)一个NgModele中。

在app下创建组件命令:ng generate component  a***-***
  1.这个会创建目录src/app/a***-***
  2.在目录中生成四个文件 
      a:作为组件样式的css文件;
      b:作为组件模板的html文件;
      c:存放组件类 a***-*** 的typeScript文件
      d:a***-***  类的测试文件

主从组件
  1.添加 @input()装饰器的输入属性,外部的组件会帮到到它。 hero 属性
  2.使用属性绑定语法可以让父组件控制子组件。

服务
  1.聚焦于展示数据,使用angular的依赖注入机制把它注入到项目中,不需要使用new来创建服务。
  2. 使用angular CLI创建服务, ng generate service XXX
  3. 会在src/app/xxx.service.ts生成该XXXService类的骨架;
  4. @Injectable() 服务导入了angualr的Injectable符号,并且给这个服务类添加了@Injectable()装饰器。它会把这个类标记为依赖注入系统的参与者之一。


提供((provide) HeroService)
  1.在要求service注入到component之前,必须先将这个服务提供给依赖注入系统。
  2.默认的情况下,cli命令generate service会通过@Injectable装饰器添加元数据形式,使用根注入器将你的服务注册成提供商。
     //service前面的@Injectable()语句定义,providedIn元数据的值是“root”
      @Injectable({
           providedIn: 'root',
      })
  3.当angular创建XXcomponent的时候,依赖注入系统就会吧xxService参数设置为XXService的单例对象。
  4.在构造函数中注入service
      constructor(private heroService: HeroService) { }
      这个参数做了两件事:
        1:声明了一个私有的service属性;
        2:把它标记为一个service的注入点;
     当 Angular 创建 `xxxComponent` 时,依赖注入系统就会把这个 `xxxxService` 参数设置为 `xxxxService` 的单例对象。
  4.Angular 只会绑定到组件的公共属性。

*[ngIf]只有在有消息时才会显示消息区。
*[ngFor] 用来在一系列 `<div>` 元素中展示消息列表。

  5.在组件的 ngOnInit 生命周期钩子中调用 xxxxService 方法,而不是构造函数中;
  6.用 RxJS 的 of() 方法返回了一个模拟英雄数据的可观察对象Observable<Hero[]>)
  
路由
  1.最好在一个独立的顶级模块中加载和配置路由器,专注于路由功能,有根模块APPModule导入;
  2.CLI:  ng generate module app-routing --flat --module=app
  3.典型的angular路由有两个属性
           1.path:一个用于匹配浏览器地址栏中URL的字符串
           2.component:当导航到此路由时,路由器应该创建哪个组件。
  4.forRoot(),是要在应用的顶级配置这个路由器。会提供路由所需要的服务提供商和指令,也会基于浏览器的当前URL执行首次导航。
  5.routerLink 是 RouterLink 指令的选择器,它会把用户的点击转换为路由器的导航操作。是routerModule中的另一个公共指令。


错误处理:要捕获错误就要用RxJS中的catchError()操作符来简历对Observble结果的处理管道(pipe)


添加仪表盘视图     
  1.CLI:ng generate component dashbord
  2.这个类跟HeroesComponent很像
        1:它定义了一个 heroes 数组属性;
        2:它的构造函数希望 Angular 把 HeroService 注入到私有的 heroService 属性中。
        3:在 ngOnInit() 生命周期钩子中调用 getHeroes


添加默认路由     
  1.如果让应用自动导航到某个仪表盘,需要把路由添加到AppRoutingModule.Routes数组中,这个路由会把一个空路径的URL重定向到redirectTo:“”;
        { path: '', redirectTo: '/dashboard', pathMatch: 'full' },
  2.把一个参数化的路由添加到AppRoutingModule.Routes中,path 中的冒号(:)表示 :id 是一个占位符,它表示某个特定英雄的 id。
        { path: 'detail/:id', component: HeroDetailComponent },

支持路由的component    
  1.在component中import{ ActivatedRoute/Location/HeroService}
  2.ActivatedRoute保存着这个component的实例的路由信息,这个组件会提取UEL中的路由参数,id就是要显示的id信息。
  3.HeroService从远端服务器获取英雄数据,本组件将使用它来获取显示的数据。
  4.location是一个angular的服务,用来与浏览器打交道。
  5.route.snapshot 是一个路由信息的静态快照,抓取自组件刚刚创建完毕之后。
  6.paramMap 是一个从 URL 中提取的路由参数值的字典。
  7.注意,反引号 ( ` ) 用于定义 JavaScript 的 模板字符串字面量以便嵌入 `id`




  HTTP
  1.在appModule中引入HttpClientModule;
  2.把它加入 @[NgModule.imports 数组;

  模拟数据服务器
  1.CLI命令:npm install angular-in-memory-web-api --save
  2.模拟出远程数据的服务器通讯,可以通过httpclient来发起请求和接收响应,不用在乎实际上是这个内存web api在拦截这些请求,操作个内存数据库,给出仿真响应。
  3.重要:这个内存web api模块与angular中http模块无关。

  Http 方法返回单个值
  1.所有的 HttpClient 方法都会返回某个值的 RxJS `Observable`。
  2.HTTP 是一个请求/响应式协议。你发起请求,它返回单个的响应。
  3.通常,Observable可以在一段时间内返回多个值。 但来自 HttpClient的 Observable总是发出一个值,然后结束,再也不会发出其它值。


  错误处理
  1.catchError() 操作符会拦截失败的 Observable。 它把错误对象传给错误处理器,错误处理器会处理这个错误。
  2.handleError()方法会报告这个错误,并返回一个无害的结果(安全值)
  3.HttpClient.put()方法接受三个参数
      1:URL 地址
      2:要修改的数据(这里就是修改后的英雄)
      3:选项


  AsyncPipe
  1.$ 是一个命名惯例用来表明 heroes$ 是一个 Observable,而不是数组。
  2.ngFor不能直接使用 `Observable`。它后面还有一个管道字符(|),后面紧跟着一个 async,它表示 Angular 的AsyncPipe并且会自动订阅到 Observable。



  RxJS Subject 类型的 searchTerms
  1.Subject 既是可观察对象的数据源,本身也是 Observable。 你可以像订阅任何 Observable 一样订阅 Subject。
  2.
  3.
  4.
  5.




  1.
  2.
  3.
  4.
  5.






  1.
  2.
  3.
  4.
  5.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,616评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,020评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,078评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,040评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,154评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,265评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,298评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,072评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,491评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,795评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,970评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,654评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,272评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,985评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,815评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,852评论 2 351

推荐阅读更多精彩内容