Angular 4入门教程系列:5:Tour Of Heroes之组件复用
来源:互联网 发布:西门子pdm软件下载 编辑:程序博客网 时间:2024/05/22 06:43
这篇文章将会学习一下如何进行组件的复用,以及组件如何接受输入,父子组件如何进行绑定。
学习目标
通过这篇文章,将会学到如下内容:
- 将原本的一个文件拆成多个
- 多个组件之间如何进行关联
学习时长
五分钟左右
Hero类
将Hero类从app.component.ts中独立出去形成一个新的文件为hero.ts,并export出去。
/workspace/HelloAngular/src/app # cat hero.tsexport class Hero { id: number; name: string;}/workspace/HelloAngular/src/app #
同时删除原本定义在app.component.ts中的Hero的定义,然后import Hero进来
/workspace/HelloAngular/src/app # cat app.component.tsimport { Component } from '@angular/core';import { Hero } from './hero'@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css']})export class AppComponent { title = 'Tour of Heroes'; heroes = HEROES; selectedHero: Hero; onSelect(hero: Hero): void { this.selectedHero = hero; }}const HEROES: Hero[] = [ { id: 11, name: 'Mr. Nice' }, { id: 12, name: 'Narco' }, { id: 13, name: 'Bombasto' }, { id: 14, name: 'Celeritas' }, { id: 15, name: 'Magneta' }, { id: 16, name: 'RubberMan' }, { id: 17, name: 'Dynama' }, { id: 18, name: 'Dr IQ' }, { id: 19, name: 'Magma' }, { id: 20, name: 'Tornado' }];/workspace/HelloAngular/src/app #
HeroDetail组件
将用来显示详细信息的部分进行组件化,只需要传入相关的hero信息即可
只需要注意如下几件事情:
- Hero类需要import进来
- 由于独立了,所以原本SelectedHero也可以直接命名为hero了
- 需要用@Input()来定义hero,使其成为一个输入属性
/workspace/HelloAngular/src/app # cat hero-detail.component.tsimport { Component, Input } from '@angular/core';import { Hero } from './hero';@Component({ selector: 'hero-detail', template: ` <div *ngIf="hero"> <h2>{{hero.name}} details!</h2> <div><label>id: </label>{{hero.id}}</div> <div> <label>name: </label> <input [(ngModel)]="hero.name" placeholder="name"/> </div> </div> `})export class HeroDetailComponent { @Input() hero: Hero;}/workspace/HelloAngular/src/app #
组件声明
组件HeroDetail还需要在模块中进行生命,每个组件都必须在一个Angular模块而且只能在一个Angular模块中进行声明。增加声明之后的app.module.ts代码如下:
/workspace/HelloAngular/src/app # cat app.module.tsimport { BrowserModule } from '@angular/platform-browser';import { NgModule } from '@angular/core';import { FormsModule } from '@angular/forms';import { AppComponent } from './app.component';import { HeroDetailComponent } from './hero-detail.component'@NgModule({ declarations: [ AppComponent, HeroDetailComponent ], imports: [ BrowserModule, FormsModule ], providers: [], bootstrap: [AppComponent]})export class AppModule { }/workspace/HelloAngular/src/app #
HTML模板
在主模板的底部加入HeroDetail的组件,才能使得两个组件得到连接,需要加入
/workspace/HelloAngular/src/app # cat app.component.html <h1>{{title}}</h1> <h2>My Heroes</h2> <ul class="heroes"> <li *ngFor="let hero of heroes" [class.selected]="hero === selectedHero" (click)="onSelect(hero)"> <span class="badge">{{hero.id}}</span> {{hero.name}} </li> </ul> <hero-detail [hero]="selectedHero"></hero-detail>/workspace/HelloAngular/src/app #
结果确认
发现和之前仍然一样,因为我们只进行了重构,拆了一下结构而已。
总结
通过这篇文章,我们了解到了Angular中的组件的Input属性和使用方法,以及多个组件如何进行结合使用,组件复用是Angular2以后的能看到的越来越好的特性,值得多花一点时间进行研究。
阅读全文
0 0
- Angular 4入门教程系列:5:Tour Of Heroes之组件复用
- Angular 4入门教程系列:7:Tour Of Heroes之路由
- Angular 4入门教程系列:4:Tour Of Heroes之事件处理
- Angular 4入门教程系列:3:Tour of Heroes之双向数据绑定
- Angular 4入门教程系列:6:Tour Of Heroes之服务和依赖注入
- Angular 4入门教程系列:8:Tour Of Heroes之前后端服务
- 【Angular2】Tour of Heroes 之 e2e测试
- Angular 4入门教程系列:9:TypeScript:ECMAScript之前世今生
- Angular 4入门教程系列:1:HelloWorld
- Angular 4入门教程系列:1:运行在Docker中的HelloWorld
- Angular 4入门教程系列:11:TypeScript:基础数据类型
- Angular 4入门教程系列:12:TypeScript:类与接口
- Angular 4入门教程系列:13:跨域问题解决方法
- Angular 4入门教程系列:14:PrimeNG的使用方式
- Angular 4入门教程系列:15:NG-ZORRO的使用方式
- Angular 4入门教程系列:16:NG-ZORRO:ICON/Button/Grid
- Angular 4入门教程系列:17:NG-ZORRO:Layout
- Angular 4入门教程系列:18:编译优化与nginx压缩
- 小米二季度手机出货创纪录,雷军定了“一个亿”的小目标
- 惊呆!人类药丸?今天一大波机器人占领了深圳喜来登六楼 | CCF-GAIR 2017
- vue.js
- Python变量和数据类型
- 【实践】电路结构初探
- Angular 4入门教程系列:5:Tour Of Heroes之组件复用
- 百度金融高级科学家吴健民:智慧金融助力金融机构迎接 AI 新时代 | CCF-GAIR 2017
- 现场花絮:最酷的机器人,最火的会场,还有最牛的演讲者 | CCF-GAIR 2017
- Ubuntu下安装VMware Tools的详细过程
- cms02---basic-Hibernate
- 把书读薄:大型网站技术架构-核心原理与案例分析(第四篇 架构师)
- Linux 修改swap虚拟内存大小
- 非标准json,标准json,json字符串与js对象,Java对象之间的相互转换
- JavaSE中的集合结构.和集合特性,及集合常用接口和实现类的特性.