详解Angular6学习笔记之主从组件


Posted in Javascript onSeptember 05, 2018

主从组件

继学习笔记6,现在可以在页面上显示一个数组,但是原则上不能将所有特性放在同一个组件中,因为如果将所有特性放在同一个组件中,当特性特别多时,组件就变得不好维护了。所以要将大型组件拆分为多个小型组件,使每一个小型组件集中处理某一个特性任务或者工作流,而且这样也便于维护。

这次要将学习笔记6中的查看hero详情,放置在一个新的,独立,可复用的组件中,集中在新的组件管理和维护hero详情的信息。

1.创建一个新的组件

使用 Angular CLI 生成一个名叫 hero-detail 的新组件。

wjydeMacBook-Pro:demo wjy$ ng generate component hero-detail
CREATE src/app/hero-detail/hero-detail.component.css (0 bytes)
CREATE src/app/hero-detail/hero-detail.component.html (30 bytes)
CREATE src/app/hero-detail/hero-detail.component.spec.ts (657 bytes)
CREATE src/app/hero-detail/hero-detail.component.ts (288 bytes)
UPDATE src/app/app.module.ts (548 bytes)

这样就生成了 HeroDetailComponent 组件所需要的文件,并把它声明在 AppModule 中。

2.编写 HeroDetailComponent的模版(hero-detail.component.html)

从 HeroesComponent 模板的底部把表示英雄详情的 HTML 代码剪切粘贴到所生成的 HeroDetailComponent 模板中。

粘贴过来的html代码中,有selectHero这个属性,由于现在我们展示的不仅仅是被选中的hero,而是需要展示的是每一个hero,这个过程相当于将HeroDetail这个组件的功能扩大化。所以将其更改为:hero , hero-detail.component.html如下:

<div *ngIf="hero">
 <h2>{{hero.name | uppercase}} Details</h2>
 <div><span>id: </span>{{hero.id}}</div>
 <div>
  <label>name:
   <input [(ngModel)]="hero.name" placeholder="name"/>
  </label>
 </div>
 
</div>

因为HeroDetail重的hero是从其他父组件得到。所以hero 属性必须是一个带有 @Input() 装饰器的输入属性,因为外部的 HeroesComponent 组件将会绑定到它。

具体步骤:

导入Hero

import { Hero } from '../hero';

导入Input符号

import { Component, OnInit, Input } from '@angular/core';

定义hero

@Input() hero: Hero;

这样,就对heroDetail的类文件写好了,heroDetail所做的工作就是:从其他的父组件中接收一个Hero类型的对象,并将它展示出来

3.显示 HeroDetailComponent

现在有HeroDetail组件显示每一个Hero的具体详情信息,而Heroes组件需要显示每一个Hero的详细信息,这个时候,Heroes组件和heroDetail组件就有了主从关系,heroes组件需要将需要展示详情的Hero对象传给具有展示功能的HeroDetail组件

HeroDetailComponent 的选择器是 'app-hero-detail'。 把 <app-hero-detail> 添加到 HeroesComponent 模板的底部,以便把英雄详情的视图显示到那里,并把 HeroesComponent.selectedHero 绑定到该元素的 hero 属性, HeroesComponent模版即:

<h2>My Heroes</h2>
<ul class="heroes">
 <li *ngFor="let hero of heroes" (click)="onSelect(hero)" [class.selected]="hero === selectedHero">
  <span class="badge">{{hero.id}}</span> {{hero.name}}
 </li>
</ul>
<app-hero-detail [hero]="selectedHero"></app-hero-detail>

保存浏览器刷新,界面和之前的不会有变化,但是会有一下优点:

  • 通过缩减 HeroesComponent 的职责简化了该组件。
  • 把 HeroDetailComponent 改进成一个功能丰富的英雄编辑器,而不用改动父组件 HeroesComponent。
  • 改进 HeroesComponent,而不用改动英雄详情视图。
  • 将来可以在其它组件的模板中重复使用 HeroDetailComponent。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用脚本调用样式的几种方法
Dec 09 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
Jun 28 Javascript
javascript针对DOM的应用分析(三)
Apr 15 Javascript
jQuery学习笔记(1)--用jQuery实现异步通信(用json传值)具体思路
Apr 08 Javascript
tangram框架响应式加载图片方法
Nov 21 Javascript
使用AOP改善javascript代码
May 01 Javascript
js限制文本框只能输入中文的方法
Aug 11 Javascript
前端jquery部分很精彩
May 03 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
Mar 09 Javascript
B/S(Web)实时通讯解决方案分享
Apr 06 Javascript
对angularjs框架下controller间的传值方法详解
Oct 08 Javascript
layui 上传文件_批量导入数据UI的方法
Sep 23 Javascript
webpack4 入门最简单的例子介绍
Sep 05 #Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
Sep 05 #Javascript
JS实现点击拉拽轮播图pc端移动端适配
Sep 05 #Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
Sep 05 #Javascript
解决vue点击控制单个样式的问题
Sep 05 #Javascript
浅谈webpack4.x 入门(一篇足矣)
Sep 05 #Javascript
vuejs点击class变化的实例
Sep 05 #Javascript
You might like
PHP中查询SQL Server或Sybase时TEXT字段被截断的解决方法
2009/03/10 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
thinkphp文件处理类Dir.class.php的用法分析
2014/12/08 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
IE与firefox下Dhtml的一些区别小结
2009/12/02 Javascript
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
javascript学习笔记(十二) RegExp类型介绍
2012/06/20 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
微信小程序之拖拽排序(代码分享)
2017/01/21 Javascript
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
Python 'takes exactly 1 argument (2 given)' Python error
2016/12/13 Python
Python变量和数据类型详解
2017/02/15 Python
使用Python读取安卓手机的屏幕分辨率方法
2018/03/31 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
opencv3/C++ 平面对象识别&amp;透视变换方式
2019/12/11 Python
用python拟合等角螺线的实现示例
2019/12/27 Python
Django微信小程序后台开发教程的实现
2020/06/03 Python
详解pandas apply 并行处理的几种方法
2021/02/24 Python
如何用PHP实现邮件发送
2012/12/26 面试题
国际经济贸易专业推荐信
2013/11/06 职场文书
终端业务员岗位职责
2013/11/27 职场文书
办公室内勤岗位职责范本
2013/12/09 职场文书
便利店的创业计划书
2014/01/15 职场文书
节约电力资源的建议书
2014/03/12 职场文书
农村婚礼主持词
2014/03/13 职场文书
学习十八大宣传标语
2014/10/09 职场文书
2014年班主任工作总结
2014/11/08 职场文书
质量保证书格式
2015/02/27 职场文书
Java基础-封装和继承
2021/07/02 Java/Android