详解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 相关文章推荐
jQuery ready函数滥用分析
Feb 16 Javascript
基于javascript滚动图片具体实现
Nov 18 Javascript
自己使用js/jquery写的一个定制对话框控件
May 02 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
Aug 22 Javascript
js数组依据下标删除元素
Apr 14 Javascript
js获取表格的行数和列数的方法
Oct 23 Javascript
vue.js项目nginx部署教程
Apr 05 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
Sep 19 Javascript
Vue动态路由缓存不相互影响的解决办法
Feb 19 Javascript
Jquery cookie插件实现原理代码解析
Aug 04 jQuery
vue select 获取value和lable操作
Aug 28 Javascript
浅谈vue在html中出现{{}}的原因及解决方式
Nov 16 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线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
php使用正则过滤js脚本代码实例
2014/05/10 PHP
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
Jquery插件easyUi表单验证提交(示例代码)
2013/12/30 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
Sequelize中用group by进行分组聚合查询
2016/12/12 Javascript
实例解析Array和String方法
2016/12/14 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
C#实现将一个字符转换为整数
2017/12/12 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
Win7 64位下python3.6.5安装配置图文教程
2020/10/27 Python
pandas 转换成行列表进行读取与Nan处理的方法
2018/10/30 Python
利用Django模版生成树状结构实例代码
2019/05/19 Python
python 比较2张图片的相似度的方法示例
2019/12/18 Python
Python vtk读取并显示dicom文件示例
2020/01/13 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
环保倡议书300字
2014/05/15 职场文书
社区护士演讲稿
2014/08/27 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
《世界多美呀》教学反思
2016/02/22 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书
Python图像处理库PIL详细使用说明
2022/04/06 Python