当前位置: 首页 > news >正文

Angular-03:组件模板

各种学习后的知识点整理归纳,非原创!

组件模板

  • ① 数据绑定
  • ② 属性绑定
  • ③ 类名绑定
  • ④ 样式绑定
  • ⑤ 事件绑定
  • ⑥ 获取原生DOM对象
    • 6.1 在组件模板中获取
    • 6.2 在组件类中获取
  • ⑦ 双向数据绑定
  • ⑧ 内容投影
    • 8.1 select选择器
    • 8.2 单槽投影
    • 8.3 多槽投影
  • ⑨ 安全操作符(数据绑定的容错处理)

① 数据绑定

  1. 将组件类中的数据显示在组件模板中,组件类数据发生变化时会自动同步到组件模板中。(数据驱动DOM)
  2. 语法:{{}},插值表达式。

② 属性绑定

  • DOM对象属性
  1. 语法:[属性名] // 属性名加中括号[]
<img [src]="imgUrl" />
  • HTML标签属性
  1. [attr.属性名] // attr.属性名加中括号[]
  2. 自定义属性适用于该情况
<td [attr.colspan]="colspan"></td>

③ 类名绑定

  1. 语法1:[class.类名]=布尔值
  2. 语法2:[ngClass]={ 类名:条件 }
<p [class.active]="true"></p><p [ngClass]="{'a-name':true,'b-name':false}"></p>

④ 样式绑定

  1. 语法1:[style.css属性名]=条件;
  2. 语法2:[ngStyle]={css属性名:css属性值}
<p [style.width]="isDefault ? '100px' : '200px'"></p><p [ngStyle]="{'width':100px,'height':'200px'}"></p>

⑤ 事件绑定

<!-- 鼠标单击 -->
<p (click)="show($event)"></p>  
<p (click)="show()"></p><!-- 按下enter键触发 -->
<input type="text" (keyup.enter)="show($event)" /> 
// ts中定义函数show
show(event:Event){//...
}

⑥ 获取原生DOM对象

6.1 在组件模板中获取

举例:获取文本框中输入的值。

  1. #userName : 模板变量,变量中存储的就是原生Dom对象本身;
  2. 通过事件处理的方式传递到组件类中;
<!-- 输入完回车之后,可以通过定义的 `#username` 获取输入的值 --><input type="text" (keyup.enter)="getValue(username.value)" #username />
  // 在ts中定义模板变量和接收方法// 该变量此处不定义也可以获取到,能正常运行。但是在ng build时可能会编译失败,有严格模式。@ViewChild('username') username: ElementRef<HTMLParagraphElement | undefined>;getValue(value: Event) {console.log("value", value)}

6.2 在组件类中获取

  1. @ViewChild属性装饰器,用来从模板视图中获取匹配的元素。
  2. 视图查询在ngAfterViewInit钩子函数调用前完成,所以在该函数中才能获取到查询元素。

稍微有点详细的用法:angular知识点–@ViewChild详解

举例1: 使用ViewChild装饰器获取一个元素

  1. 在组件模板上添加模板变量。
  2. 在组件类中使用@viewChild装饰器获取模板变量。
  3. @ViewChild是装饰器函数,参数是定义的模板变量名(pName),然后赋值给新的变量pElement(也可以理解为取了个别名)。 声明该变量的类型,undefined可以理解为类型保护,不会因为未获取到该元素而报错。
<p #pName> hello! </p>
// 在ts中定义该模板变量@ViewChild("pName") pElement:ElementRef<HTMLParagraphElement> | undefined;ngAfterViewInit(){console.log("pName", this.pName && this.pName.nativeElement);}

输出截图:(截图放错了,应该输出的时hello!)
在这里插入图片描述
举例2: 使用ViewChildren装饰器获取一组元素

  1. 使用@ViewChildren() 装饰器从组件模板中获取匹配多个元素,返回的结果是一个QueryList集合。
 <ul><li #items>a</li><li #items>b</li><li #items>c</li><li #items>d</li>
</ul>
  @ViewChildren("items") liElements:QueryList<HTMLElement> | undefined;ngAfterViewInit(){console.log("items",this.liElements)console.log("items",this.liElements.toArray())}

打印1:
在这里插入图片描述
打印2:
在这里插入图片描述


⑦ 双向数据绑定

  1. 数据在组件模板和组件类中双向同步。(在组件模板中数据做了更改会在组件类中同步跟随变化,反之一样)
  2. 常用于表单中,所以该模块依赖于angular表单模块,需要导入FormsModule。
  3. 语法:[(ngModule)]=“变量名”

举例:在input文本框内输入值的时候,userName值一直在改变。在组件类的方法中也在影响着组件模板中的值。

  <input type="text" [(ngModule)]="userName" /><button (click)="changeValue()">在组件类中更改</button> 
 // tsuserName:string="";changeValue(){this.userName="hello angular";}

⑧ 内容投影

  1. ng-content,也叫内容嵌入,是组件的一个高级功能特性。
  2. 能够很好的扩充组件功能,方便代码的复用。常用于用来创建可复用的组件。
  3. 可以理解为:在编写模板组件时,使用ng-content做一个占位符,引用组件时,往此处填充。
  4. 在定义多个插槽时,插槽的顺序就是内容最终的显示顺序。(在使用插槽时的内容顺序不会生效)
  5. 另外一篇指路:angular知识点–组件内容嵌入

8.1 select选择器

可理解为css选择器,作用是类似的。

类型用法
html标签select=“标签”
css类名select=“.类名”
自定义组件名称select=“组件名”
自定义属性名称select=“[属性名]”

举例:场景:制作一个可复用的导航栏(NavComponent),导航栏的内容可动态变化

8.2 单槽投影

一个ng-content,不使用select选择器

<!-- NavComponent --><!-- 一个导航栏,左边是返回按钮,中间ng-content是可动态替换的内容。 -->
<div class="nav-wrapper"><span>返回</span><div class="content"><ng-content></ng-content></div>
</div>
<!-- 在其他组件使用NavComponent 组件--><!-- app-nav 中的 p标签的内容会被填充显示到ng-content区域-->
<app-nav><p>测试文字</p>     
</app-nav>

结果:
在这里插入图片描述

8.3 多槽投影

  1. 多个ng-content,使用select选择器
  2. 一个组件多个插槽,需要使用select与让插槽与元素有一一对应关系。
  • 在引入的app-nav中添加多个条件的内容,让app-nav组件的的select选择器去匹配
    1. 在使用插槽的时候,不根据在引用组件中定义的内容顺序显示,而是根据在定义插槽时排列的顺序。
    2. 这里使用插槽时,顺序与app-nav组件模板中定义的插槽不一致,生效的时插槽内的顺序。
<app-nav><p>测试文字(默认)</p> <!-- 无法匹配到,因为没有符合条件的选择器,页面上也不会渲染该节点 --><span>匹配标签选择器</span><P class="head">匹配类选择器</P><p userName="'nothing'">匹配属性选择器</p><app-test></app-test> <!-- 匹配app-test选择器。显示组件内的默认内容:app-test works! --></app-nav>

在app-nav组件内添加多个ng-content与之匹配的选择器。

<!-- app-nav组件 -->
<div class="nav-wrapper"><span>返回</span><div class="content"><!-- 标签 --><ng-content select="span"></ng-content><!-- css类名 --><ng-content select=".head"></ng-content><!-- 组件名 --><ng-content select="app-test"></ng-content><!-- 自定义属性 --><ng-content select="[userName]"></ng-content></div>
</div>

结果:

  1. 除了第一条不符合选择器匹配规则,其他的分别都匹配上了
    在这里插入图片描述

⑨ 安全操作符(数据绑定的容错处理)

  1. 当属性不存在或者属性为可选的或者对象层级较深,angular会有报错

几种处理手段:

   <p>{{user?.name}}</p>    //user存在才会取name值<p *ngIf="user">{{user.name}}</p><p> {{user && user.name}}</p>

相关文章:

Angular-03:组件模板

各种学习后的知识点整理归纳&#xff0c;非原创&#xff01; 组件模板 ① 数据绑定② 属性绑定③ 类名绑定④ 样式绑定⑤ 事件绑定⑥ 获取原生DOM对象6.1 在组件模板中获取6.2 在组件类中获取 ⑦ 双向数据绑定⑧ 内容投影8.1 select选择器8.2 单槽投影8.3 多槽投影 ⑨ 安全操作…...

mysql 操作慢查询日志

1、mysql 批量插入300w数据 CREATE PROCEDURE test_insert_200w() BEGINDECLARE i INT;SET i1;WHILE i<3000000 DOINSERT INTO shop_user (password, telephone, username) VALUES (admin, 15510304125, concat(admin, i));SET ii1;END WHILE; END; //执行sql call test_in…...

illuminate/database 使用 二

上一篇文章写怎么单独使用illuminate/database&#xff0c;这回讲下怎么整合到项目里使用。为此特意看了下laravel对其使用。本篇文章&#xff0c;参照laravel的使用&#xff0c;简单实现。 一 原理 laravel 里使用illuminate/config。 illuminate/config composer 地址&…...

二叉树的概念

文章目录 二叉树一、树的概念1.树形结构1.1. 树的特点&#xff1a;1.2 概念&#xff1a;1.3 树的表示形式 2.树的应用 二、二叉树1.二叉数的概念2.满二叉树3.完全二叉树4.二叉树的性质练习&#xff1a; 二叉树 一、树的概念 1.树形结构 1.1. 树的特点&#xff1a; 1.根节点没…...

SpringCloud之Eureka的学习【详细】

目录 服务架构演变 单体架构 分布式架构 分布式架构需要考虑的问题 微服务 架构比较 微服务技术对比 服务拆分注意事项 案例 服务远程调用 RestTemplate Eureka注册中心 RestTemplate存在的问题 服务调用考虑的问题 Eureka的作用 搭建EurekaServer 服务注册 …...

学习ftp

文章目录 一、FTP介绍二、两种模式&#xff08;主动模式和被动模式&#xff09;三、FTP配置文件详解四、实际场景举例五、黑白名单六、网络限制 一、FTP介绍 1.FTP&#xff08;File Transfer Protocol&#xff09;是一种应用广泛且古老的互联网文件传输协议。 2.主要应用于互联…...

Android笔记(九):Compose组件的状态(一)

在使用Compose定义UI界面时&#xff0c;可以发现界面的变换往往与Compose组件内部的状态相关&#xff0c;当状态值发生变化时&#xff0c;Compose构成的可组合的界面也会刷新发生相应的变化。将在本笔记中将对可组合项的状态的定义、状态提升、状态丢失和状态的保存进行简单介绍…...

3.2. onnx export multi_batch

前言 将onnx bs=1 修改为多batch操作 参考链接: https://www.cnblogs.com/tangjunjun/p/16500116.html https://blog.csdn.net/weixin_43863869/article/details/128638397?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault…...

探索低代码PaaS平台的优势与选择原因

PaaS是一种云产品&#xff0c;它为应用程序的开发和部署提供基础结构。它提供中间件、开发工具和人工智能来创建功能强大的应用程序&#xff0c;大多数PaaS服务都与存储和网络基础架构捆绑在一起&#xff0c;就像基础架构即服务&#xff08;IaaS&#xff09;一样&#xff0c;可…...

AD教程(一)工程组成及创建

AD教程&#xff08;一&#xff09;工程组成及创建 工程组成 原理图库 绘制电阻模型、芯片模型、电容模型等&#xff0c;即将元件模型绘制出来。 原理图 将绘制的原件模型放置到原理图中&#xff0c;然后再添加连接的导线、网络标号。器件和器件之间的连接关系&#xff0c;在原…...

SAP业务从ECC升级到SAP S/4HANA有哪些变化?有哪些功能得到增强?

SAP在2015年推出了新一代商务套件SAP S/4 HANA。 SAP S/4 HANA (全称SAP Business suite 4 SAP HANA),这款新产品完全构建于目前先进的内存平台SAP HANA 之上&#xff0c;同时采用现代设计理念&#xff0c;通过SAP Fiori 提供精彩的用户体验 (UX)。提供比ECC更强大的功能。S/4h…...

常用conda和pip命令总结

conda 环境相关命令 conda 新建环境命令 conda create -n env_name pythonx.xenv_name 是环境名&#xff0c;自己换成所要创建的虚拟环境的名字 pythonx.x 是版本号&#xff0c;比如3.7&#xff0c;3.8这样 查看conda环境下所有的虚拟环境 conda info -e conda env list两条…...

【计算机网络】路由器的工作原理

文章目录 输入端口处理和基于目的地转发交换结构输出端口处理排队问题参考资料 路由器的四个组件 输入端口(input port)&#xff1a;执行物理层功能&#xff08;input port 左边方框、output port 右边方框&#xff09;、数据链路层功能&#xff08;input/output port 中间方框…...

队列概念|循环队列的实现

前言 今天我们将学习循环队列实现&#xff0c;我们首先介绍队列的概念和结构&#xff0c;之后一步步讲解循环队列由来与实现。 一、队列的概念与结构 1、队列的概念 队列&#xff1a; 只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表。队列是…...

监控数据控中的数据表

背景&#xff1a; 在做一个项目的时候&#xff0c;每次代码分析的数据会写入到数据库&#xff0c;目前想实现当数据插入到数据库后&#xff0c;对新插入的数据进行监控解析。当有一个新纪录插入到数据表的时候&#xff0c;数据库可以自动解析新插入的数据记录。 思路如下&…...

进程替换..

1、单进程版 – 最简单的先看看程序替换 现象就是 1、我们用自己的进程封装了内置指令ls,并且代码中execl 后 printf 的after并没有打印出来。 2、谈进程替换的原理 单进程替换基本原理 上面例子中execl的做法非常简单粗暴&#xff0c;要调用ls&#xff0c;那么就把mycom…...

M1安装OpenPLC Editor

下载OpenPLC Editor for macOS.zip文件后&#xff0c;使用tar -zvxf命令解压&#xff0c;然后将"OpenPLC Editor"拖入到"应用程序"文件夹 右键点击"OpenPLC Editor"&#xff0c;打开这个""文件&#xff0c;替换为以下内容 #!/bin/bash…...

STM32F10xx 存储器和总线架构

一、系统架构 在小容量、中容量和大容量产品 中&#xff0c;主系统由以下部分构成&#xff1a; 四个驱动单元 &#xff1a; Cotex-M3内核、DCode总线&#xff08;D-bus&#xff09;和系统总线&#xff08;S-bus&#xff09; 通用DMA1和通用DMA2 四个被动单元 内部SRAM 内部…...

并发编程

什么是并发编程&#xff1f; 并行&#xff1a;在同一个时间节点上&#xff0c;多个线程同时执行(是真正意义上的同时执行) 并发&#xff1a;一个时间段内&#xff0c;多个线程依次执行。 并发编程&#xff1a;在例如买票、抢购、秒杀等等场景下&#xff0c;有大量的请求访问…...

Lauterbach使用指南之RunTime功能

Lauterbach使用指南之RunTime功能 前言 首先&#xff0c;请问大家几个小小问题&#xff0c;你清楚&#xff1a; Lauterbach这个工具是干什么用的吗&#xff1f;在软件运行过程中如何测量两个运行point之间的runtime时间呢&#xff1f;Lauterbach的RunTime功能具体应当如何来操…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...