全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解Angular2 之 结构型指令

Angular 有一个强力的模板引擎,它能让你轻松维护元素的DOM树结构。

Angular指令可分为三种

  1. 组件
  2. 属性型指令
  3. 结构型指令

组件

组件其实就是一个带模板的指令。是这三种指令中最常用的,我们会编写大量的组件来构建application。

属性型指令

属性型指令会修改元素的外观或者行为。 e.g. NgStyle可以修改元素的好几个样式。

结构型指令

结构型指令通过添加和删除 DOM 元素来改变DOM的布局。

我们经常看到的内置的结构型指令有:ngIf、ngSwitch、ngFor。

下面我们着重介绍ngIf。

NgIf案例分析

该指令接受一个布尔值,并据此让一整块DOM树出现或者消失。

注意:这里是出现或者消失,并不是隐藏。

隐藏元素的利弊

当我们隐藏元素时,组件的行为还在继续。

它仍然附加子啊它所属于的DOM元素上,它仍然在监听事件。angular会继续检查哪些能影响数据绑定的变更。组件原本要做的哪些事情仍然在进行!它还是占用着那么多的资源。

另外一方面,重新显示这个组件会很快。

组件以前的状态被保留着,并随时可以显示。组件不用重新初始化,当然,该操作付出代价比较大!

移除元素组件


把ngIf设置为false,将会影响到组件的资源消耗。angular会从DOM中移除该元素,停止相关组件的变更检测,把它从DOM事件中移除,并且销毁组件。组件会被垃圾回收,并释放内存。


如果我们很快再次使用这个组件的时候,重建组件的代价是非常大的。

当ngIf重新变成true的时候,angular会重新创建该组件及其子树。angular会重新运行每个组件的初始化逻辑。

总结

基于上面的利弊分析,无论是我们在使用内置的指令还是使用自定的指令的时候,我们应该自己分析提添加、移除元素以及创建和销毁组件的后果。

标签

在Angular应用之外,标签的默认CSS属性display是none。 它的内容存在于一个隐藏的文档片段中。
而在Angular应用中,Angular会移除 标签及其子元素。

我们可以通过把短语”Hip! Hip! Hooray!”中间的”hip”包在一个标签中来验证下这个效果。

<p>
 Hip!
</p>
<template>
 <p>
  Hip!
 </p>
</template>
<p>
 Hooray!
</p>

这时候显示的内容是'Hip! Hooray!',在Angular的控制下,DOM的效果是不同的。

显然,Angular把标签及其内容替换成了一个空白

自定义指令

我们自顶一个类似ngIf的指令。

import { Directive, Input } from '@angular/core';
import { TemplateRef, ViewContainerRef } from '@angular/core';

/** 选中器[],是匹配页面上的指令,可以有多个名称,由于是自己的指令,所以没有使用ng开头 */
@Directive({ selector: '[myUnless]' })
export class UnlessDirective {
 /**
  * 我们需要访问模板,并且还需要一个渲染器来渲染它的内容。
  * 我们通过TemplateRef来访问模板。渲染器是ViewContainerRef。
  * 我们把它们都作为私有变量注入到构造函数中。
  */
 constructor(
  private templateRef: TemplateRef<any>,
  private viewContainer: ViewContainerRef
  ) { }

 /**
  * 如果条件为假,我们就渲染模板,否则就清空元素内容。
  * 我们现在先把myUnless属性定义成一个“只写”属性。
  */
 @Input() set myUnless(condition: boolean) {
  if (!condition) {
   this.viewContainer.createEmbeddedView(this.templateRef);
  } else {
   this.viewContainer.clear();
  }
 }
}

几个概念

星号(*)效果

这个星号是一种“语法糖”。它简化了ngIf和ngFor —— 无论是写还是读。

ngIf

接下来这两个ngIf范例的效果完全相同,只是我们写成了另一种风格:

<!-- Examples (A) and (B) are the same -->
<!-- (A) *ngIf paragraph -->
<p *ngIf="condition">
 Our heroes are true!
</p>

<!-- (B) [ngIf] with template -->
<template [ngIf]="condition">
 <p>
  Our heroes are true!
 </p>
</template>

要知道,Angular会把风格(A)写成风格(B)。 它把段落及其内容移到了 标签中。 它把指令移到了 标签上,成为该标签的一个属性绑定 —— 包装在方括号中。 宿主组件的condition 属性的布尔值决定该模板的内容是否应该被显示。

ngFor

Angular把*ngFor转换成一个类似的形式:

<!-- Examples (A) and (B) are the same -->

<!-- (A) *ngFor div -->
<div *ngFor="let hero of heroes">{{ hero }}</div>

<!-- (B) ngFor with template -->
<template ngFor let-hero [ngForOf]="heroes">
 <div>{{ hero }}</div>
</template>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# angular2  # 结构型指令  # angular  # AngularJS内置指令  # AngularJS中的指令全面解析(必看)  # Angular2内置指令NgFor和NgIf详解  # 用AngularJS的指令实现tabs切换效果  # AngularJS中关于ng-class指令的几种实现方式详解  # 深入讲解AngularJS中的自定义指令的使用  # AngularJS基础 ng-if 指令用法  # 详解AngularJS中ng-src指令的使用  # AngularJS基础 ng-include 指令示例讲解  # 移除  # 子树  # 移到  # 绑定  # 自己的  # 它把  # 几个  # 是一种  # 成了  # 让你  # 还在  # 渲染器  # 多个  # 将会  # 布尔值  # 那么多  # 而在  # 把它  # 我们可以  # 这两个 


相关文章: 如何通过网站建站时间优化SEO与用户体验?  建站之星如何实现PC+手机+微信网站五合一建站?  如何选择最佳自助建站系统?快速指南解析优劣  宝塔Windows建站如何避免显示默认IIS页面?  临沂网站制作企业,临沂第三中学官方网站?  公众号网站制作网页,微信公众号怎么制作?  开心动漫网站制作软件下载,十分开心动画为何停播?  建站之星后台管理如何实现高效配置?  ,sp开头的版面叫什么?  如何实现建站之星域名转发设置?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  怀化网站制作公司,怀化新生儿上户网上办理流程?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  建站主机如何选?性能与价格怎样平衡?  如何选择PHP开源工具快速搭建网站?  网站制作的步骤包括,正确网址格式怎么写?  网页设计与网站制作内容,怎样注册网站?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  C#如何使用XPathNavigator高效查询XML  自助网站制作软件,个人如何自助建网站?  详解jQuery中基本的动画方法  微信h5制作网站有哪些,免费微信H5页面制作工具?  建站之星导航菜单设置与功能模块配置全攻略  建站之星3.0如何解决常见操作问题?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  小型网站制作HTML,*游戏网站怎么搭建?  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  模具网站制作流程,如何找模具客户?  外贸公司网站制作哪家好,maersk船公司官网?  建站之星后台密码遗忘或太弱?如何重置与强化?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  高端建站三要素:定制模板、企业官网与响应式设计优化  如何通过cPanel快速搭建网站?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  ,石家庄四十八中学官网?  如何在Windows环境下新建FTP站点并设置权限?  制作网站怎么制作,*游戏网站怎么搭建?  公司网站设计制作厂家,怎么创建自己的一个网站?  动图在线制作网站有哪些,滑动动图图集怎么做?  音响网站制作视频教程,隆霸音响官方网站?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  Java解压缩zip - 解压缩多个文件或文件夹实例  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  C#如何序列化对象为XML XmlSerializer用法  建站OpenVZ教程与优化策略:配置指南与性能提升  宝塔建站后网页无法访问如何解决?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  西安大型网站制作公司,西安招聘网站最好的是哪个? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。