详解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 相关文章推荐
动态调用CSS文件的JS代码
Jul 29 Javascript
ajax上传时参数提交不更新等相关问题
Dec 11 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
Jan 06 Javascript
node.js中使用node-schedule实现定时任务实例
Jun 03 Javascript
jquery超简单实现手风琴效果的方法
Jun 05 Javascript
JS如何生成一个不重复的ID的函数
Dec 25 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
JS实现微信摇一摇原理解析
Jul 22 Javascript
jquery实现楼层滚动效果
Jan 01 jQuery
angular 数据绑定之[]和{{}}的区别
Sep 25 Javascript
解决微信浏览器缓存站点入口文件(IIS部署Vue项目)
Jun 17 Javascript
Vue组件生命周期运行原理解析
Nov 25 Vue.js
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
phpmyadmin3 安装配置图解教程
2012/03/29 PHP
php实现格式化多行文本为Js可用格式
2015/04/15 PHP
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
jQuery 行背景颜色的交替显示(隔行变色)实现代码
2009/12/13 Javascript
JS getMonth()日期函数的值域是0-11
2010/02/15 Javascript
jquery checkbox,radio是否选中的判断代码
2010/03/20 Javascript
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
js使用onmousemove和onmouseout获取鼠标坐标的方法
2015/03/31 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
早该知道的7个JavaScript技巧
2016/06/21 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
jQuery Tree Multiselect使用详解
2017/05/02 jQuery
jQuery实现简单复制json对象和json对象集合操作示例
2018/07/09 jQuery
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
简单了解python协程的相关知识
2019/08/31 Python
python提取xml里面的链接源码详解
2019/10/15 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
Python ORM编程基础示例
2020/02/02 Python
Django数据库迁移常见使用方法
2020/11/12 Python
CSS3中媒体查询结合rem布局适配手机屏幕
2019/06/10 HTML / CSS
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
网站域名和主机:Domain.com
2019/04/01 全球购物
介绍一下Linux文件的记录形式
2013/09/29 面试题
毕业生求职推荐信
2013/11/04 职场文书
商务英语应届生自我鉴定
2013/12/08 职场文书
大学社团招新的通讯稿
2014/09/10 职场文书
婚前财产协议书范本
2014/10/19 职场文书
NGINX 权限控制文件预览和下载的实现原理
2022/01/18 Servers
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫