详解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 DOM事件(笔记)
Apr 08 Javascript
js 获取元素在页面上的偏移量的方法汇总
Apr 13 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
jquery实现简单的瀑布流布局
Dec 11 Javascript
JavaScript实现公历转农历功能示例
Feb 13 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
Aug 16 Javascript
vue2.0 循环遍历加载不同图片的方法
Mar 06 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
Sep 14 Javascript
node.js express框架简介与实现
Jul 23 Javascript
关于layui时间回显问题的解决方法
Sep 24 Javascript
JavaScript修改注册表实例代码
Jan 05 Javascript
js实现简易ATM功能
Oct 27 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计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
python在windows命令行下输出彩色文字的方法
2015/03/19 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
Python ftp上传文件
2016/02/13 Python
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
python 实现识别图片上的数字
2019/07/30 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
tensorflow查看ckpt各节点名称实例
2020/01/21 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
python dumps和loads区别详解
2020/02/04 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
《千年梦圆在今朝》教学反思
2014/02/24 职场文书
贷款委托书范本
2014/04/08 职场文书
新农村建设标语
2014/06/24 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
PyTorch中permute的使用方法
2022/04/26 Python