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 - 使用 ngModel 作为键,把该指令导出到一个局部模板变量中(如:#myVar="ngModel")<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 变量-->
<button 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 应用至少需要一个充当根模块使用的模块。 如果你要把某些特性添加到应用中,可以通过添加模块来实现。

函数

localStorage实现数据持久化

简介

Local Storage 技术是一种在 Web 浏览器中用于客户端数据存储的机制。它允许 Web 应用程序在用户的本地浏览器上存储键值对形式的数据,这样用户在关闭浏览器窗口或页面后,数据仍然可以保留。这为开发者提供了一种在客户端持久保存数据的简单方式,而不必依赖于服务器。

在这里插入图片描述

使用

Local StorageWeb Storage API 的一部分,与 Session Storage 不同,Local Storage 的数据在关闭浏览器后仍然存在。它使用键值对的形式存储数据,其中键和值都是字符串。该技术基于域名,即同一域名下的所有页面共享相同的 Local Storage
 
使用方式也非常简单直观,使用其提供的 getset API 即可。
 
JavaScript 中,通过 localStorage 对象来访问和操作 Local Storage

  1. 存储
localStorage.setItem(key,value); // eg:home.tsconstructor(public navCtrl: NavController,public loadingCtrl: LoadingController) {// 存储数据localStorage.setItem('username', 'John');// 存储数字localStorage.setItem('userAge', 25);}
  1. 获取:如果key不存在返回null。
localStorage.getItem(key); 
  1. 删除:一旦删除,key对应的数据将会全部删除。
localStorage.removeItem(key);
  1. 全部清除
localStorage.clear();

参考文档

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

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

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

相关文章

Unity填坑-灯光烘焙相关

Unity填坑-灯光烘焙相关 文章目录 Unity填坑-灯光烘焙相关前言一、Light的模式二、光的效果分类三、各种Light模式与烘焙的说明1.Realtime,实时光2.baked,烘焙光3.mixed,混合 四、实时全局光五、其他说明1.动态物体的全局光照效果2.手机使用烘焙注意的点3.其他设置 前言 项目组…

GB28181/GB35114平台LiveGBS何如添加白名单,使指定海康、大华、华为等GB28181摄像头或录像机设备可以免密接入

1、什么是GB/T28181级联 协议定义中的解释如下&#xff1a; 级联 cascadednetworking 两个信令安全路由网关之间按照上下级关系连接,上级中心信令控制服务器通过信令安全路由网 关可调用下级中心信令控制服务器所管辖的监控资源,下级中心信令控制服务器通过信令安全路由网 关向…

(26)Linux 进程通信之共享内存(共享储存空间)

共享内存是System V版本的最后一个进程间通信方式。共享内存&#xff0c;顾名思义就是允许两个不相关的进程访问同一个逻辑内存&#xff0c;共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一…

端侧AI的“春风化雨手”,翻开中国科技下一页

大模型是一年多来全球科技圈的最大热点&#xff0c;手机厂商想要借助大模型的锋芒&#xff0c;打造高端形象&#xff0c;获得新的增长&#xff0c;这无可厚非。 不过&#xff0c;大家注意到没有&#xff0c;越是“AI强者”&#xff0c;对待大模型越举重若轻。 简单来说&#xf…

43-函数的声明定义,函数表达式定义,函数的调用,声明提升,参数,形参,实参

1.函数声明定义 function 函数名(){} 2.函数表达式定义 匿名式函数表达式 var 函数名 function(){} 命名式函数表达式 var 函数名 function 函数关键字(){} 3.函数的调用 var fn function f(){alert("aaa");}//函数名&#xff08;&#xff09;//函数想调用几次…

rpb/rpc文件说明与matlab读取

什么是rpb/rpc文件&#xff1f; rpb文件是用来存储用于遥感数据几何校正的RPC&#xff08;Rational Polynomial Coefficients &#xff09;模型的文件。类似的还有RPC文件&#xff0c;rpb与rpc文件只是格式不同&#xff0c;但包含的信息一致。其用于从图像坐标转换到地理坐标&a…

acwing4986.互质数的个数

题目不难 有个好的细节想着分享一下 一开始写的有点问题&#xff5e;需要特判掉一个... #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e510;const ll mod 998244353;ll qmi(ll a,ll b){ll ans 1;while(b){if(b&1)ans ans*a%…

浅谈6种流行的API架构风格

前言 API在现代软件开发中扮演着重要的角色&#xff0c;它们是不同应用程序之间的桥梁。编写业务API是日常开发工作中最常见的一部分&#xff0c;选择合适的API框架对项目的成功起到了至关重要的作用。本篇文章将浅谈一下当前6种流行的API架构风格的优点、缺点以及适用场景。 …

反向传播(Back Propagation)

目录 回归简单模型的梯度计算 反向传播计算图链式求导链式法则定理&#xff1a; Forward 前馈计算反向传播Back Propagation例子线性模型的计算图计算前馈过程反向传播过程&#xff08;逆向求导&#xff09; 练习 Pytorch中的前馈过程和反向传播过程Tensor代码小结 回归 简单模…

中药房数字化-亿发中药饮片信息化建设方案,中药材饮片智能追溯

中药&#xff08;包括中成药、颗粒剂、中药饮片等&#xff09;是中医临床的重要工具和武器&#xff0c;中药材是其中的核心要素。在这一体系中&#xff0c;“药材好&#xff0c;药才好”是关键&#xff0c;因为只有中药材的品质稳定和高效&#xff0c;才能最大限度地确保中医治…

Android音视频: 引入FFmpeg

本文你可以了解到 本文将介绍如何将上一篇文章编译出来的 FFmpeg so 库&#xff0c;引入到 Android 工程中&#xff0c;并验证 so 是否可以正常使用。 一、开启 Android 原生 C/C 支持 在过去&#xff0c;通常使用 makefile 的方式在项目中引入 C/C 代码支持&#xff0c;随…

Minitab的单因子方差分析的结果

单因子方差分析概述 当有一个类别因子和一个连续响应并且想要确定两个或多个组的总体均值是否存在差异时&#xff0c;可使用 单因子方差分析。如果经检验&#xff0c;发现至少有一组存在差异&#xff0c;请使用单因子方差分析中的比较对话框来标识存在显著差异的组对。 例如&…

前端布局——垂直、水平居中

行内元素 方法一&#xff1a;给行内元素设置行高 <div class"box"><span>行内元素</span> </div> <style type"text/css">.box{width: 100%;height: 200px;background-color: orange;line-height: 200px;text-align: cent…

代码随想录算法训练营第三天| LeetCode203.移除链表元素、707.设计链表、206.反转链表

文章目录 一、203. 移除链表元素感受代码二、707.设计链表感受代码206.反转链表感受总结一、203. 移除链表元素 感受 我对这道题。从理论上来说太熟悉了。咸鱼讲数据结构常用的方法他都会讲。但是我没上机没写过。到后面上机还是写不出来。giao。 代码 第一次写,想说一下,…

LeetCode刷题:141. 环形链表

题目&#xff1a; 是否独立解答出&#xff1a;否&#xff0c;有思路&#xff0c;但是代码报错&#xff0c;参考解题代码后&#xff0c;修改通过 解题思路&#xff1a;利用循环与哈希表存储每一个节点&#xff0c;如果发现添加不进去说明&#xff0c;存在环&#xff0c;正常来说…

x3daudio1_7.dll如何恢复,这6个方法都能修复x3daudio1_7.dll丢失问题

x3daudio1_7.dll文件缺失”。那么&#xff0c;什么是x3daudio17.dll文件&#xff1f;它的作用和影响又是什么呢&#xff1f;本文将详细介绍x3daudio17.dll文件的定义、作用和影响&#xff0c;并提供6个修复方法来解决这个问题。 一、x3daudio1_7.dll是什么&#xff1f; x3dau…

推荐熊猫电竞赏金电竞系统源码

熊猫电竞赏金电竞系统源码&#xff0c;包含APP、H5和搭建视频教程&#xff0c;支持运营级搭建&#xff0c;这套源码是基于ThinkPHPUniaapp框架开发的。 系统是一套完整的电竞平台开发源码&#xff0c;包括赛事管理、用户系统、竞猜系统、支付系统等模块。源码结构清晰&#xff…

vue3+vite开发生产环境区分

.env.development VITE_APP_TITLE本地.env.production VITE_APP_TITLE生产-ts文件中应用 console.log(import.meta.env.VITE_APP_TITLE)在html中应用&#xff0c;需要安装 html 模板插件 pnpm add vite-plugin-html -Dvite.config.ts中 import { createHtmlPlugin } from v…

非常好用的个人工作学习记事本Obsidian

现在记事本有两大流派&#xff1a;Obsidian 和Notion&#xff0c;同时据说logseq也很不错 由于在FreeBSD下后两种都没有相关ports&#xff0c;所以优先尝试使用Obsidian Obsidian简介 Obsidian是基于Markdown文件的本地知识管理软件&#xff0c;并且开发者承诺Obsidian对于个…

算法-二分专题

文章目录 概念应用场景代码模板OJ练习寻找指定元素1题目描述输入描述输出描述样例题解 寻找指定元素2题目描述输入描述输出描述样例题解 寻找指定元素3题目描述输入描述输出描述样例题解 寻找指定元素4题目描述输入描述输出描述样例题解 寻找指定元素5题目描述输入描述输出描述…