Angular - 笔记

文章目录

语法

属性绑定

Angular 的双向绑定语法是方括号和圆括号的组合 [()][] 进行属性绑定,() 进行事件绑定。

1. 语法
// 在属性上用{{}}
<p title="{{title}}">// 使用[]做属性绑定 
<p [title]="title">举例:
//html文件<p>属性绑定</p><div [id]="'apple'">Apple</div><div [id]="lemon">{{lemon}}</div><div id="{{lemon}}">{{lemon}}</div><div [class]="'item'">绑定Class - 1</div><div [class]="itemClass">绑定Class - 2</div><h3 [class.h3-dom]="h3Dome">class.h3-dom根据true决定是否显示</h3><h3 [class.h3-dom]="'true'">class.h3-dom根据true决定是否显示</h3>  // 也可以渲染成功<h3 [class]="'h3-dom font w string'">多类名绑定</h3><a [title]="product.name + ' details'">  {{ product.name }} </a>// ts文件lemon : string = 'lemon'itemClass : string ='item-Class';h3Dome : boolean = true;product = {name: '张三'};
  1. ngMoudle
// home.html eg: 1<input [(ngModel)]="name" #ctrl="ngModel" required><p>Value: {{ name }}</p>  <!--111--><p>Value: {{ ctrl.value }}</p> <!--111--><p>Valid: {{ ctrl.valid }}</p> <!--true-->
// home.html eg: 2<label for="example-ngModel">[(ngModel)]:</label><input [(ngModel)]="currentItem.name" id="example-ngModel"> 
// home.tsexport class HomePage {currentItem = {name: '张三'};}
// home.html   eg: 3 - ngForm中使用 ngModel<div><form #f="ngForm" (ngSubmit)="onSubmit(f)" novalidate><input name="first" ngModel required #first="ngModel"><br><input name="last" ngModel><br><button>Submit</button></form><p>First name value: {{ first.value }}</p><p>First name valid: {{ first.valid }}</p><p>Form value: {{ f.value | json }}</p><p>Form valid: {{ f.valid }}</p></div>

引用模板变量

  1. 语法:在模板中,要使用井号 # 来声明一个模板变量。下列模板变量 #phone 声明了一个名为 phone 的变量,其值为此 <input> 元素。
<input #phone placeholder="phone number" /><!--可以在组件模板中的任何地方引用某个模板变量。这里的 <button> 就引用了 phone 变量-->
utton type="button" (click)="callPhone(phone.value)">Call</button>// eg:1 这个是input自带value属性,{{phone.value}}会呈现test,更改input值不会有改变,因为没写ngMoudle进行双向绑定
<input #phone placeholder="phone number" value="text" />
<p>Value: {{ phone.value }}</p>// eg:2 双向数据绑定
<input #phone type="text" id="name" class="form-control" name="name" ngModel required />
{{phone.value}}

组件绑定

父组件传子组件 @input

现在有父组件<parentlist> 和子组件<childlist>

  1. 配置子组件
//userlist.ts
import { Component, Input } from '@angular/core'; // First, import Input
export class ChildComponent {@Input() item = ''; // decorate the property with @Input()
}
// userlist.html
Userlist组件:Today's item: {{item}}
  1. 配置父组件
//parentlist.ts
export class ParentComponent { // 业务逻辑currentItem = 'Television';
}
// parentlist.html
<parentlist [item]="currentItem"></parentlist>

运行结果如下,这样就实现了父组件的 currentItem 变量绑定给了子组件的 item
在这里插入图片描述

子组件传父组件 @output
  1. 子组件
// 1. html <label for="item-input">Add an item:</label><input type="text" id="item-input" #newItem><button ion-button  (click)="addNewItem(newItem.value)">Add</button>// 2. ts
import { Output, EventEmitter } from '@angular/core';export class ChildComponent {@Output() newItemEvent = new EventEmitter<string>();addNewItem(value: string) {// value = "测试value";this.newItemEvent.emit(value);console.log("----"+value);}
}
  1. 父组件
// 1. html<child (newItemEvent)="addItem($event)"></child><ul><li *ngFor="let item of items">{{item}}</li></ul>// 2. ts
export class ParentComponent {items = ['item1', 'item2', 'item3', 'item4'];addItem(newItem: string) {this.items.push(newItem);console.log(newItem);}
}

上述可以这么理解:

  1. 当触发子组件的 addNewItem() 函数时,页面数据双向绑定去拿到一个值给到 newItemEvent
  2. 父组件根据 @outpiy newItemEvent 拿到的值,即作为参数 event ,去执行 addItem 函数给到 items ,然后页面输出。
    在这里插入图片描述
EventEmitter

Angular 提供了一个 EventEmitter 类,它用来通过组件的 @Output() 装饰器 发送一些值。EventEmitter 扩展了 RxJS Subject,并添加了一个 emit() 方法,这样它就可以发送任意值了。当你调用 emit() 时,就会把所发送的值传给订阅上来的观察者的 next() 方法。
 
EventEmitter 与指令@Output 一起在组件中使用以同步或异步方式发送自定义事件,并通过订阅实例来注册这些事件的处理程序。

EventEmitter语法:
emit() : 发出包含给定值的事件。
subscribe(): 注册此实例发出的事件的处理器
  1. 子组件
// 1.html<div class="zippy"><div (click)="toggle()">点击该文本</div><div [hidden]="visible"><ng-content></ng-content></div></div> // 2.ts
export class ChildComponent {visible = true;// tslint:disable-next-line: no-output-native@Output() open = new EventEmitter<any>();// tslint:disable-next-line: no-output-native@Output() close = new EventEmitter<any>();toggle() {this.visible = !this.visible;if (this.visible) {this.close.emit('关闭');} else {this.open.emit('打开');this.open.subscribe((data) => {console.log('open subscribe:' + data);});}}
}
  1. 父组件: 子组件去运行 toggle()函数去赋值给 open 或者 close,父组件根据拿到的值去运行onOpen()或者onClose语句。
// 1.html<child (open)="onOpen($event)" (close)="onClose($event)">我是child组件的内容</child>// 2. ts
export class ParentComponent {onOpen(e) {console.log(e);}onClose(e) {console.log(e);}
}

@ViewChild

@ViewChild 可以获取到当前组件视图中的单个元素

@ViewChild('selector', {read: ElementRef, static: false})  selector; 
1. selector - 要查询的指令类型或名称。
2. read - 用于从查询到的元素中读取不同的令牌。
3. static - 如果为 true,则在变更检测运行之前解析查询结果,如果为 false,则在变更检测之后解析。默认为 false// eg:1
字符串形式的模板引用变量(比如可以使用 @ViewChild('cmp') 来查询 <my-component #cmp></my-component>
里面的cmp就是模板应用变量// eg:2 
我想通过#myname去查询原始,并将返回ViewContainerRef类型
@ViewChild('myname', {read: ViewContainerRef}) target; 

例子如下:

// 1.home.html<p #myLabel>icon</p>
// 2. home.ts
export class HomePage {@ViewChild('myLabel') temp;ngAfterViewInit(): void {console.log(this.temp);} // ElementRef {nativeElement: p}
}
@ViewChildren获取子组件对象列表

管道

PIPE,翻译为管道。Angular 管道是编写可以在HTML组件中声明的显示值转换的方法。Angular 管道之前在 AngularJS 中被称为过滤器,从 Angular 2 开始就被称为管道。管道将数据作为输入并将其转换为所需的输出。
 
简单来说,就是 Angular Pipes 可以帮我们把我们的输入,包括字符串,整数和日期等等,按照我们的需要转化为特定的格式并且在浏览器中显示。通过插值表达式,我们可以定义管道并且在特定的情况下使用它,在 Angular 中提供给了我们许多种不同类型的管道,当然,你甚至还可以去自定义管道。
 
更多管道官当网址
 
总结:管道就是一个方法,可以将你的输入转化为特定的你需要的输出格式,Angular提供给了我们许多的内置管道,当内置管道不满足你的要求的时候,你还可以通过自定义管道来更加灵活的自定义输出格式。

1.时间管道

// 1. html {{date }}  // Mon Jan 08 2024 09:41:10 GMT+0800 (中国标准时间)<br> {{date | date:'yyyy-MM-dd'}} //  2024-01-08// 2. ts
export class HomePage {date = new Date();
}
  1. 货币管道
// 1.html<p>A: {{a | currency}}</p>  <!-- A: $0.26 --><p>A: {{a | currency:'CAD'}}</p> <!-- A: CA$0.26 --><p>A: {{a | currency:'CAD':'code'}}</p> <!-- B: CA$0,001.35 --><p>B: {{b | currency:'CAD':'symbol':'4.2-2'}}</p> <!-- B: CA$0,001.35 --><p>B: {{b | currency:'CAD':'symbol-narrow':'4.2-2'}}</p> <!-- B: $0,001.35 --><p>B: {{b | currency:'CLP'}}</p> <!-- B: CLP1.35 -->// 2.ts
export class HomePage {a: number = 0.259;b: number = 1.3495;
}
  1. 自定义管道
// 1. 创建指令
ng g p pipes/pipe-name
// ionic
ionic g + pipe + name// 2. app.module.ts配置(本次的例子是基于ionic3框架)
import {PipesModule} from '../pipes/pipes.module';imports: [ PipesModule,IonicModule.forRoot(MyApp)],
// 3. pipes/test/test/ts
@Pipe({name: 'test', // 这个name用于下面html的管道名称
})
export class TestPipe implements PipeTransform {transform(value: string, ...args) {let value1 = "test"+value;return value1;}
}// pages/home.html
{{lemon | test}}

常用模块

Angular 应用至少需要一个充当根模块使用的模块。 如果你要把某些特性添加到应用中,可以通过添加模块来实现。

参考文档

[1] W3CSchool
[2] 官网 - 父子组件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/234484.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

phpcms v9后台添加草稿箱功能

一、后台添加文章模板phpcms/modules/content/templates/content_add.tpl.php中94行增加”保存草稿“按钮&#xff1a; <div class"button"><input value"<?php echo L(save_draft);?>" type"submit" name"dosubmit_draf…

PostGIS教程学习十九:基于索引的聚簇

PostGIS教程学习十九&#xff1a;基于索引的聚簇 数据库只能以从磁盘获取信息的速度检索信息。小型数据库将完全位于于RAM缓存&#xff08;内存&#xff09;&#xff0c;并摆脱物理磁盘访问速度慢的限制。但是对于大型数据库&#xff0c;对物理磁盘的访问将限制数据库的信息检…

DataFrame详解

清洗相关的API 清洗相关的API: 1.去重API: dropDupilcates 2.删除缺失值API: dropna 3.替换缺失值API: fillna 去重API: dropDupilcates dropDuplicates(subset):删除重复数据 1.用来删除重复数据,如果没有指定参数subset,比对行中所有字段内容,如果全部相同,则认为是重复数据,…

学习笔记之——3D Gaussian Splatting及其在SLAM与自动驾驶上的应用调研

之前博客介绍了NeRF-SLAM&#xff0c;其中对于3D Gaussian Splatting没有太深入介绍。本博文对3D Gaussian Splatting相关的一些工作做调研。 学习笔记之——NeRF SLAM&#xff08;基于神经辐射场的SLAM&#xff09;-CSDN博客文章浏览阅读967次&#xff0c;点赞22次&#xff0…

Java中的输入输出处理(一)

文件 文件&#xff1a;文件是放在一起的数据的集合。比如1.TXT。 存储地方&#xff1a;文件一般存储在硬盘&#xff0c;CD里比如D盘 如何访问文件属性&#xff1a;我们可以通过java.io.File类对其处理 File类 常用方法&#xff1a; 方法名称说明boolean exists()判断文件或目…

LiveGBS流媒体平台GB/T28181常见问题-国标编号是什么设备编号和通道国标编号标记唯一的摄像头|视频|镜头通道

LiveGBS国标GB28181中国标编号是什么设备编号和通道国标编号标记唯一的摄像头|视频|镜头通道 1、什么是国标编号&#xff1f;2、国标设备ID和通道ID3、ID 统一编码规则4、搭建GB28181视频直播平台 1、什么是国标编号&#xff1f; 国标GB28181对接过程中&#xff0c;可能有的小…

安科瑞对电子半导体行业电能质量监测与治理系统解决方案——安科瑞赵嘉敏

摘要&#xff1a;在国家鼓励半导体材料国产化的政策导向下&#xff0c;本土半导体材料厂商不断提升半导体产品技术水平和研发能力&#xff0c;逐渐打破了国外半导体厂商的垄断格局半导体材料国产化进程&#xff0c;促进中国半导体行业的发展。半导体产品的制造使用到的设备如单…

c++|关键字extern

一个C语言项目往往由多个文件组合而成。而对于多个文件来说&#xff0c;它们可能会共用到一些相同的变量。而有些情况下&#xff0c;这些相同的变量并没有出现在本文件内&#xff0c;有可能在其他文件内。而一个文件可能只会搜寻该文件内部是否有该变量。 所以&#xff0c;需要…

ROS学习笔记(9)进一步深入了解ROS第三步

0.前提 1. (C)Why did you include the header file of the message file instead of the message file itself?&#xff08;为包含消息的头文件而不是消息本身&#xff1f;&#xff09; 回答&#xff1a;msg文件是描述ROS消息字段的文本文件&#xff0c;用于生成不同语言消息…

NX二次开发 Block UI 指定方位控件的应用

一、概述 NX二次开发中一般都是多个控件的组合&#xff0c;这里我首先对指定方位控件进行说明并结合选择对象控件&#xff0c;具体如下图所示。 二、实现功能获取方位其在选择面上原点的目标 2.1 在initialize_cb()函数中进行初始化&#xff0c;实现对象选择过滤面 //过滤平…

回归预测 | Matlab实现DE-BP差分算法优化BP神经网络多变量回归预测

回归预测 | Matlab实现DE-BP差分算法优化BP神经网络多变量回归预测 目录 回归预测 | Matlab实现DE-BP差分算法优化BP神经网络多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现DE-BP差分算法优化BP神经网络多变量回归预测&#xff08;完整源码和…

计算机组成原理19——控制单元的功能和实现1

本系列文章是学习了网课《哈尔滨工业大学–计算机组成原理》之后&#xff0c;用以梳理思路而整理的听课笔记及相关思维拓展。本文涉及到的观点均为个人观点&#xff0c;如有不同意见&#xff0c;欢迎在评论区讨论。 目录 四种周期下的微操作命令取指周期间址周期执行周期非访存…

大众汽车宣布将ChatGPT,批量集成在多种汽车中!

1月9日&#xff0c;大众汽车在官网宣布&#xff0c;将ChatGPT批量集成到电动、内燃机汽车中。 大众表示&#xff0c;将ChatGPT与其IDA语音助手相结合&#xff0c;用户通过自然语言就能与ChatGPT进行互动&#xff0c;例如&#xff0c;帮我看看最近的三星米其林饭店在哪里&#…

dubbo与seata集成

1.seata是什么? Seata 是一款开源的分布式事务解决方案&#xff0c;致力于在微服务架构下提供高性能和简单易用的分布式事务服务。 2.seata的注解 GlobalTransactional&#xff1a;全局事务注解&#xff0c;添加了以后可实现分布式事务的回滚和提交&#xff0c;用法与spring…

linux 内存管理

地址类型 一个虚拟内存系统, 意味着用户程序见到的地址不直接对应于硬件使用 的物理地址. 虚拟内存引入了一个间接层, 它允许了许多好事情. 有了虚拟内存, 系统重 运行的程序可以分配远多于物理上可用的内存; 确实, 即便一个单个进程可拥有一个虚拟 地址空间大于系统的物理内存…

Docker 镜像以及镜像分层

Docker 镜像以及镜像分层 1 什么是镜像2 Docker镜像加载原理2.1 UnionFs&#xff1a;联合文件系统2.2 Docker镜像加载原理2.3 Docker镜像的特点 3 镜像的分层结构4 可写的容器层 1 什么是镜像 镜像是一种轻量级、可执行的独立软件包&#xff0c;用来打包软件运行环境和基于运行…

C语言中关于函数递归的理解

递归的概念&#xff1a;如果一个对象部分包含它自己,或者利用自己定义自己,则称这个对象是递归的;如果 一个过程直接或间接调用自己,则称这个过程是一个递归过程。递归的主要思考方式在于&#xff1a;将大事化小 我们先看一个例子 题目&#xff1a;输入一个无符号数&#xff0…

Open CASCADE学习|非线性方程组

非线性方程组是一组包含非线性数学表达式的方程&#xff0c;即方程中含有未知数的非线性项。解这类方程组通常比解线性方程组更为复杂和困难。 非线性方程组在很多领域都有应用&#xff0c;例如物理学、工程学、经济学等。解决非线性方程组的方法有很多种&#xff0c;包括数值…

CCSC,一种CPU架构

core-circuit-separate-computer 核与执行电路的分离&#xff0c;最初是为了省电。 用寄存器实现这种分离。 V寄存器控制着执行电路的供电&#xff0c;V0则不供电&#xff0c;进入省电模式&#xff1b;V1则供电&#xff0c;进入工作模式。 P寄存器是parameter-register&#xf…

Spark与Cassandra的集成与数据存储

Apache Spark和Apache Cassandra是大数据领域中两个重要的工具&#xff0c;用于数据处理和分布式数据存储。本文将深入探讨如何在Spark中集成Cassandra&#xff0c;并演示如何将Spark数据存储到Cassandra中。将提供丰富的示例代码&#xff0c;以帮助大家更好地理解这一集成过程…