详解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 相关文章推荐
一段效率很高的for循环语句使用方法
Aug 13 Javascript
extjs中form与grid交互数据(record)的方法
Aug 29 Javascript
Javascript实现商品秒杀倒计时(时间与服务器时间同步)
Sep 16 Javascript
浅析jQuery移动开发中内联按钮和分组按钮的编写
Dec 04 Javascript
window.onload绑定多个事件的两种解决方案
May 15 Javascript
功能强大的Bootstrap组件(结合js)
Aug 03 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
Oct 14 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
Dec 02 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
Jan 01 Javascript
vue.js实现价格格式化的方法
May 23 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
Nov 22 Javascript
vue cli 全面解析
Feb 28 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
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
2006/10/09 PHP
YII使用url组件美化管理的方法
2015/12/28 PHP
超级退弹代码
2008/07/07 Javascript
jQuery入门第一课 jQuery选择符
2010/03/14 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
Javascript MVC框架Backbone.js详解
2014/09/18 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
学习使用bootstrap3栅格系统
2016/04/12 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
详解vue-cli快速构建项目以及引入bootstrap、jq
2017/05/26 Javascript
jQuery简单绑定单个事件的方法示例
2017/06/10 jQuery
详解Angular的8个主要构造块
2017/06/20 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
Vue 中对图片地址进行拼接的方法
2018/09/03 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
python基础教程之类class定义使用方法
2014/02/20 Python
详解python开发环境搭建
2016/12/16 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
python、Matlab求定积分的实现
2019/11/20 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
2020/04/22 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
python温度转换华氏温度实现代码
2020/12/06 Python
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
屈臣氏菲律宾官网:Watsons菲律宾
2020/06/30 全球购物
火车的故事教学反思
2014/02/11 职场文书
寻衅滋事罪辩护词
2015/05/21 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
vue中div禁止点击事件的实现
2022/04/02 Vue.js
Python OpenGL基本配置方式
2022/05/20 Python