详解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 相关文章推荐
jQuery之排序组件的深入解析
Jun 19 Javascript
php与js的区别是什么
Aug 05 Javascript
jQuery弹出框代码封装DialogHelper
Jan 30 Javascript
理解JavaScript中Promise的使用
Jan 18 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
Jun 29 Javascript
js document.getElementsByClassName的使用介绍与自定义函数
Nov 25 Javascript
基于Bootstrap分页的实例讲解(必看篇)
Jul 04 Javascript
Vue.js实现网格列表布局转换方法
Aug 25 Javascript
AngularJS实现表单元素值绑定操作示例
Oct 11 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
Aug 03 Javascript
详解如何使用微信小程序云函数发送短信验证码
Mar 13 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
Jul 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
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
php压缩文件夹最新版
2018/07/18 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
WordPress 照片lightbox效果的运用几点
2009/06/22 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
JS中获取数据库中的值的方法
2013/07/14 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
JavaScript学习小结(7)之JS RegExp
2015/11/29 Javascript
jquery实现数字输入框
2017/02/22 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
详解vue的diff算法原理
2018/05/20 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
vue做移动端适配最佳解决方案(亲测有效)
2018/09/04 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
2020/04/04 jQuery
[00:47]DOTA2荣耀之路6:玩不了啦!
2018/05/30 DOTA
在Python中使用模块的教程
2015/04/27 Python
Django框架中的对象列表视图使用示例
2015/07/21 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
几个Shell Script面试题
2012/08/31 面试题
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
安全生产月演讲稿
2014/05/09 职场文书
助学贷款贫困证明
2014/09/23 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
入党函调证明材料
2015/06/19 职场文书
葬礼主持词
2015/07/02 职场文书
学习经验交流会总结
2015/11/02 职场文书
标准版个人借条怎么写?以及什么是借条?
2019/08/28 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL
SQL中的三种去重方法小结
2021/11/01 SQL Server