详解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 相关文章推荐
javascript function、指针及内置对象
Feb 19 Javascript
JQuery插件Style定制化方法的分析与比较
May 03 Javascript
jQuery实现统计复选框选中数量
Nov 24 Javascript
解析javascript中鼠标滚轮事件
May 26 Javascript
使用coffeescript编写node.js项目的方法汇总
Aug 05 Javascript
jQuery插件实现无缝滚动特效
Nov 24 Javascript
Vue实现选择城市功能
May 27 Javascript
Angular2使用vscode断点调试ts文件的方法
Dec 13 Javascript
node.js之基础加密算法模块crypto详解
Sep 11 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
Dec 13 Javascript
小试小程序云开发(小结)
Jun 06 Javascript
小程序富文本提取图片可放大缩小
May 26 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实现数字补零功能的2个函数介绍
2014/05/12 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
php字符串操作针对负值的判断分析
2016/07/28 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
PHP实现根据密码长度显示安全条
2017/07/04 PHP
用JS实现的一个include函数
2007/07/21 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
AngularJS实现标签页的两种方式
2016/09/05 Javascript
多种方式实现js图片预览
2016/12/12 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
python3 实现的人人影视网站自动签到
2016/06/19 Python
在Python中执行系统命令的方法示例详解
2017/09/14 Python
解决pycharm remote deployment 配置的问题
2019/06/27 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
Python实现某论坛自动签到功能
2019/08/20 Python
Python短信轰炸的代码
2020/03/25 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
DataList 能否分页,请问如何实现?
2015/05/03 面试题
商务考察邀请函范文
2014/01/21 职场文书
爱心捐助倡议书
2014/05/19 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
医德医魂心得体会
2014/09/11 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
办公室文员岗位职责
2015/02/04 职场文书
2015年工会工作总结
2015/03/30 职场文书
监理中标通知书
2015/04/16 职场文书