详解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添加输出窗口的代码
Feb 07 Javascript
javascript 延迟加载技术(lazyload)简单实现
Jan 17 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
Aug 18 Javascript
Backbone.js 0.9.2 源码注释中文翻译版
Jun 25 Javascript
深入理解关于javascript中apply()和call()方法的区别
Apr 12 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
Mar 14 Javascript
Vue.2.0.5过渡效果使用技巧
Mar 16 Javascript
详解Node项目部署到云服务器上
Jul 12 Javascript
vue+axios+mock.js环境搭建的方法步骤
Aug 28 Javascript
npm qs模块使用详解
Feb 07 Javascript
jQuery实现容器间的元素拖拽功能
Dec 01 jQuery
用几道面试题来看JavaScript执行机制
Apr 30 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自动反斜杠的函数代码
2010/01/05 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
JavaScript解析JSON格式数据的方法示例
2017/01/24 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
vue 开发一个按钮组件的示例代码
2018/03/27 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
Pycharm+Scrapy安装并且初始化项目的方法
2019/01/15 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
Python实现括号匹配方法详解
2020/02/10 Python
python可视化text()函数使用详解
2020/02/11 Python
Python中求对数方法总结
2020/03/10 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
新电JAVA笔试题目
2014/08/31 面试题
自我鉴定思想方面
2013/10/07 职场文书
一份报关员的职业规划范文
2014/01/08 职场文书
网络信息安全承诺书
2014/03/26 职场文书
考核工作实施方案
2014/03/30 职场文书
质量承诺书怎么写
2014/05/24 职场文书
员工家属慰问信
2015/03/24 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
浅谈JS的原型和原型链
2021/06/04 Javascript
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers