Angular2.js——多个组件
目前我们的英雄列表和英雄详情位于同一个文件的同一个组件中,我们将来可能会受到新的需求,修改这个组件又不能影响另外一个。然而每一次更改都会给这两个组件带来风险和双倍的测试负担,没有任何好处。如果我们需要在其他地方复用英雄详情组件,英雄列表组件也会跟着混进去。
我们当前的组件违反了单一职责原则,我们需要把英雄详情拆分成一个独立的组件。
1、拆分英雄详情组件
在app目录下创建一个名叫hero-detail-component.ts的文件,并且创建HeroDetailComponent组件,代码如下:
import { Component,Input } from '@angular/core'; //Component装饰器,Input输入装饰器
import {Heroo} from './hero';
@Component({
selector: 'my-hero-detail',
})
export class HeroDetailComponent {
}
命名规则:我们希望一眼能看出哪些是组件,哪些是文件包含组件,我们所有的组件名都以.component结尾,我们组建的文件名都以.component结尾。
2、英雄的详情模板
接下来我们需要把英雄详情的模板放到这个组件中来:
import { Component,Input } from '@angular/core';
@Component({
selector: 'my-hero-detail',
template: `
<div *ngIf="hero">
<h2>{{hero.name}}详细信息</h2>
<div><label>id:</label>{{hero.id}}</div>
<div>
<label>姓名:</label>
<input [(ngModel)]="hero.name" placeholder="name">
</div>
</div>
`
})
export class HeroDetailComponent {
}
3、添加hero属性
我们在app.component.ts和hero-detail-component.ts中都需要引用Heroo这个类,所以我们把这个类新建一个文件夹hero.ts
export class Heroo{
id:number;
name:string;
}
同时我们在两个组件中AppComponent和HeroDetailComponent都导出这个类
import {Heroo} from './hero';
还得告诉HeroDetailComponent显示那个英雄,谁告诉他呢?当然是AppComponent了。
AppComponent确实知道该显示哪个英雄,用户从列表中选中的那个,用户选择的英雄在他的selectrdHero属性中。
我们需要在AppComponent模板中添加:将hero属性复制为selectedHero属性,使得AppComponent组件和HeroDetailComponent组件形成联系。
<my-hero-detail [hero]="selectedHero"></my-hero-detail>
同时修改hero-detail-component.ts
export class HeroDetailComponent {
@Input()
hero:Heroo;//带有@Input()装饰器的输入属性
}
4、更新AppModule
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import {FormsModule} from '@angular/forms';
import { AppComponent1 } from './app.component';
import {HeroDetailComponent} from './hero-detail.component';
@NgModule({
imports: [
BrowserModule,
FormsModule
],
declarations: [
AppComponent1,
HeroDetailComponent
],
bootstrap: [ AppComponent1 ]
})
export class AppModule { }
这样,我们创建了第一个可复用组件!
我们可以在应用中的任何地方使用这个HeroDetailComponent组件来显示英雄详情。
参考:https://angular.cn/docs/ts/latest/tutorial/toh-pt3.html
Angular2.js——多个组件的更多相关文章
- angular2的ElementRef在组件中获取不到
angular2的ElementRef在组件中获取不到 angular2不推荐操作dom,但是实际应用中不可避免的需要使用到dom操作,怎么操作,官方文档提供了一系列api(ElementRef,Vi ...
- 《Ext JS模板与组件基本知识框架图----模板》
最近在整理Ext JS的模板和组件,在参考<Ext JS权威指南>,<Ext JS Web应用程序开发指南>,<Ext JS API>等相关书籍后才写下这篇< ...
- 转: Vue.js——60分钟组件快速入门(上篇)
转自: http://www.cnblogs.com/keepfool/p/5625583.html Vue.js——60分钟组件快速入门(上篇) 组件简介 组件系统是Vue.js其中一个重要的概 ...
- Vue.js学习 Item11 – 组件与组件间的通信
什么是组件? 组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有 ...
- 转:Node.js邮件发送组件- Nodemailer 1.0发布
原文来自于http://www.infoq.com/cn/news/2014/07/node.js-nodemailer1.0-publish Nodemailer是一个简单易用的Node.js邮件发 ...
- vue.js 精学组件记录
组件需要注册后才可以使用. Vue.component('my-component',{ template:'<div>这是组件内容</div>' }): 局部注册组件 var ...
- vue.js相关UI组件收集
内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 ###UI组件 element ★9689 - 饿了么出品的Vue2的web UI工具套件 Vux ★6927 - 基于Vu ...
- JS日期级联组件代码分析及demo
最近研究下JS日期级联效果 感觉还不错,然后看了下kissy也正好有这么一个组件,也看了下源码,写的还不错,通过google最早是在2011年 淘宝的虎牙(花名)用原审JS写了一个(貌似据说是从YUI ...
- Vue.js 的精髓——组件
开篇:Vue.js 的精髓——组件 写在前面 Vue.js,无疑是当下最火热的前端框架 Almost,而 Vue.js 最精髓的,正是它的组件与组件化.写一个 Vue 工程,也就是在写一个个的组件. ...
随机推荐
- Golang版protobuf编译
官方网址: https://developers.google.com/protocol-buffers/ (需要FQ) 代码仓库: https://github.com/google/protobu ...
- 在Chrome中安装PostMan用来测试SpringBoot程序
1. 首先下载一个PostMan的插件,Postman_v4.1.3.crx 下载下来为这种类型的文件. 2. 在Chrome中输入chrome://extensions/ 这个,打开Chrome的扩 ...
- python实现TCP/UDP通信
一.说明 对于TCP/udp的说明已经很多了,我在这里只是简单的说明一下 二.套接字scoket 套接字是一种具有之前所说的"通信端点"概念的计算网络数据结构.相当于电话插口,没它 ...
- 老司机实战Windows Server Docker:1 初体验之各种填坑
前言 Windows Server 2016正式版发布已经有近半年时间了,除了看到携程的同学分享了一些Windows Server Docker的实践经验,网上比较深入的资料,不管是中文或英文的,都还 ...
- 1-PHP基本概念
PHP 概念:服务器脚本语言 静态网站:不支持交互的网站(html) 动态网站:支持数据交互的网站 实现动态网站的技术 实现技术 网站后缀 ASP .asp PHP .php .NET .aspx J ...
- 【2017-03-20】HTML基础知识、文字标记、图片标记、空格换行、表格、表格嵌套及布局、超链接
一.HTML基础知识 HTML: 网站(站点) - 网页 网站是由一个或者多个网页组合起来的 HTML作为文件后缀名,可以把文件变为网页 HTML是一门编程语言的名字:超文本标记语言 超越了文字的范畴 ...
- [LeetCode] Trapping Rain Water II 题解
题意 题目 思路 我一开始想的时候只考虑到一个结点周围的边界的情况,并没有考虑到边界的高度其实影响到所有的结点盛水的高度. 我们可以发现,中间是否能够盛水取决于边界是否足够高于里面的高度,所以这必然是 ...
- (8)集合之List,ArrayList,LinkedList
集合的体系结构 Collection 单列集合的接口 |----List 如果实现了List接口的集合类,具备的特点是有序,可重复 |----Set 如果实现了Set接口的集合类,集合特点无序不可重复 ...
- ubuntu如何进入local、bin目录
回到home目录,输入命令:cd /usr/local 若要进入bin目录,输入命令:cd /usr/local/bin
- JSP配置了虚拟目录使用JavaBean报错
今天遇到一个很棘手的问题,在jsp文件中使用useBean,网页返回码出现了500服务器内部错误,报错信息如下: The value for the useBean class attribute w ...