详解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 相关文章推荐
音乐播放用的的几个函数
Sep 07 Javascript
js工具方法弹出蒙版
May 08 Javascript
JavaScript动态操作表格实例(添加,删除行,列及单元格)
Nov 25 Javascript
jquery模拟LCD 时钟的html文件源代码
Jun 16 Javascript
javascript浏览器窗口之间传递数据的方法
Jan 20 Javascript
jQuery实现仿Google首页拖动效果的方法
May 04 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
May 31 Javascript
谈谈第三方App接入微信登录 解读
Dec 27 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
Mar 16 Javascript
解决Vue.js由于延时显示了{{message}}引用界面的问题
Aug 25 Javascript
Vue.js中的组件系统
May 30 Javascript
在mpvue框架中使用Vant WeappUI组件库的注意事项【推进】
Jun 09 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
动易数据转成dedecms的php程序
2007/04/07 PHP
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
php 常用算法和时间复杂度
2013/07/01 PHP
php将字符串转换成16进制的方法
2015/03/17 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
深入理解Javascript动态方法调用与参数修改的问题
2013/12/10 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
深入学习JavaScript中的Rest参数和参数默认值
2015/07/28 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
2016/05/18 Javascript
纯JavaScript手写图片轮播代码
2016/10/20 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
从vue源码看props的用法
2019/01/09 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
ES6字符串的扩展实例
2020/12/21 Javascript
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
python解析xml文件实例分析
2015/05/27 Python
Python语言的面相对象编程方式初步学习
2016/03/12 Python
Python中的迭代器与生成器高级用法解析
2016/06/28 Python
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
Django中间件基础用法详解
2019/07/18 Python
python识别验证码图片实例详解
2020/02/17 Python
工程部主管岗位职责
2013/11/17 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
幼儿园工作总结2015
2015/04/01 职场文书
vue实现同时设置多个倒计时
2021/05/20 Vue.js
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
Redis基本数据类型List常用操作命令
2022/06/01 Redis
Vue2项目中对百度地图的封装使用详解
2022/06/16 Vue.js