angular技术(持续更新)

news/2024/5/4 4:22:58/文章来源:https://blog.csdn.net/m0_59157023/article/details/129383305
  1. css类绑定

  1. [class.color-blue]="isBlue()" 如果isBlue()返回为true 这里使用color-blue的class样式

  1. style样式绑定

  1. [style.background-color]="canclick ? 'blue': 'red'"

组件与模块

模块的元数据

*declarations: 用于指定属于这个模块的视图类(View Class),即指定哪些部件组成了这个模块

angular 有组件 指令 和管道三种视图类

exports: 导出视图类

imports:引入该模块依赖的其他模块或路由,引入后模块里的组件模板才能引用外部对应的组件,指令和管道

providers: 指定模块依赖的服务,引入后该模块的所有组件都可以使用这些服务

父子组件之间传值

子组件
item.component.ts
export class ListItemComponent implements OnInit{@Input() contact:any {}; 注解,输入接受从父组件传过来的contact@OutPut() routerNavigate = new EventEmitter<number>();//输入方法
父组件
list.component.html
<list-item [contact]="contact"  (routerNavigate)="routerNavgate($event)"></list-item>
}

set属性拦截

_contact: object = {};
set contactObj(contact: object) {this._contact.name = contact.name.trim()
}
get contactObj() {rerurn this.contact
}或者[(selectedTabIndex)]="_selectedTabIndex">/*** 获取被选中的tab索引值*/get selectedTabIndex() {return this._selectedTabIndex;}/*** 设置被选中的tab索引值*/set selectedTabIndex(index: number) {this._selectedTabIndex = index;console.log(index,this._selectedTabIndex)}

组件交互:

子组件向父组件传递数据

  • @Output()

  • 通过局部变量获取子组件引用

  • 父组件使用@ViewChild获取子组件引用

  
<div class="content-tabList"#tabContentListContainer>
</div>
@ViewChild('tabContentListContainer') tabContentListContainer: ElementRef;const tabListDom = this.tabContentListContainer.nativeElement;

组件生命周期

  1. ngOnChanges()

  1. ngOnInit()

  1. ngDoCheck()

  1. ngAfterContentInit()

  1. ngAfterContentChecked()

  1. ngAfterViewInit()

  1. ngAfterViewChecked()

  1. ngOnDestroy()

注意:ngDoCheck() 和ngOnchanges不应该一起使用

服务:

服务一般是封装某种特定功能的独立模块

@Injectable

import { Injectable } from '@angular/core'@Injectable()export class SharedService {list: string[] = []append(str: string) {this.list.push(str);}
}共享服务实例:
父组件
providers: [sharedService]export class ParentComponent {list: string[] = [];constructor(private _sharedService: sharedService)ngOnInit():any {this.list = this._sharedService.list}
}

http服务:

  1. 在模块装饰器@NgModule中导入HttpModule

  1. 在组件模块中导入HTTP服务

  1. 在组件的构造函数中声明引入

// app.module.tsimport { HttpModule }  from '@angular/http';@NgModule({imports: [HttpModule // 1 在NgModule中导入HttpModule]bootstrap: [AppComponent]
})export class AppModule{}

引入服务

import {Http} from '@angular/http'// 导入http的服务@Component ({selector: 'contact',template: `<div>hello http service!</div>`
})export class ContactComponent{contstructor(http: Http)// 声明引入
}

Observable处理异步请求

@Injectable()
export class ContactService {constructor(private _http: Http) {}getContacts(): Observable<any[]> {return this._http.get(xxx).map(this.extractData).catch(this.handleError)}}

Observable异步请求为冷处理

export class ContactComponent {contractor (private: _contractService: ContactService){}getContracts() {return this._contractService.getContracts().subscribe(contacts => this.contracts = contracs,error = > this.errorMsg = error)}
}

Observable对象转成Promise的版本

@Injectable()
export class ContactService {constructor(private _http: Http) {}getContacts(): Promise<any[]>{return this._http.get(xxx).toPromise().then(this.extractData).catch(this.handleError) }    
}

请求依赖

let getFirstDataObs = Rx.Observable.create(observer => {observer.next(getFirstData());observer.complete();
})let createSecondDataObs = function(firstData) {return Rx.Observable.create(observer => {getSecondData(firstData,secondData => {observer.next(seconData);observer.complete})})
}通过Observable.prototype.concatMap()的方法,getSecondDataObs()的
数据流紧接在getFirstDataObs()的数据流后,并且最终数据流被subscribe()捕获
let observable = getFirstDataObs.concatMap(firstData => {return createSecondDataObs(firstData)}).subscribe(secondData => {doSomethingWithSecondData(seconData);
})

依赖注入

  1. 在组件中注入服务

  1. 在服务中注入服务

  1. 在模块中注入服务

  1. 层级注入

  1. 注入到派生组件

  1. 限定方式的依赖注入

  1. 使用provider注入

在服务中注入

在模块中注入

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

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

相关文章

YOLOV5中添加CBAM模块详解——原理+代码

目录一、前言二、CAM1. CAM计算过程2. 代码实现3. 流程图三、SAM1. SAM计算过程2. 代码实现3. 流程图四、YOLOv5中添加CBAM模块参考文章一、前言 由于卷积操作通过融合通道和空间信息来提取特征&#xff08;通过NNNNNN的卷积核与原特征图相乘&#xff0c;融合空间信息&#xff…

代码随想录-51-110.平衡二叉树

目录前言题目1.求高度和深度的区别节点的高度节点的深度2. 本题思路分析&#xff1a;3. 算法实现4. pop函数的算法复杂度5. 算法坑点前言 在本科毕设结束后&#xff0c;我开始刷卡哥的“代码随想录”&#xff0c;每天一节。自己的总结笔记均会放在“算法刷题-代码随想录”该专…

学习笔记:基于SpringBoot的牛客网社区项目实现(二)之Spring MVC入门

1.1 函数的返回值为空&#xff0c;因为可以使用response对象向浏览器返回数据。声明了request对象和response对象&#xff0c;dispatcherservlet自动将这两个对象传入 RequestMapping("/http")public void http(HttpServletRequest request, HttpServletResponse re…

不会吧,难道真的有程序员不知道怎么接单赚钱吗?

随着大环境逐渐转好&#xff0c;跳槽、新工作、兼职等等机会都浮出水面。抛开跳槽、新工作不谈&#xff0c;今天就专门来说说程序员接单赚钱有哪些靠谱的平台。 首先分享一波关于接私活有哪些注意事项&#xff0c;给大家提个醒&#xff0c;避免盲目入坑。 一、程序员接单须知…

深度学习知识点全面总结_深度学习总结

深度学习知识点全面总结_深度学习总结 神经网络与深度学习结构(图片选自《神经网络与深度学习》一邱锡鹏) 目录 常见的分类算法 一、深度学习概念 1.深度学习定义 2.深度学习应用 3.深度学习主要术语 二、神经网络基础 1. 神经网络组成 感知机 多层感知机 3.前向传播…

复位和时钟控制(RCC)

目录 复位 系统复位 电源复位 备份区复位 时钟控制 什么是时钟&#xff1f; 时钟来源 二级时钟源: 如何使用CubeMX配置时钟 复位 系统复位 当发生以下任一事件时&#xff0c;产生一个系统复位&#xff1a;1. NRST引脚上的低电平(外部复位) 2. 窗口看门狗计数终止(WWD…

项目实战典型案例27——单表的更新接口有9个之多

单表的更新接口有9个之多一&#xff1a;背景介绍环境准备引入pom依赖配置数据库连接mybatis配置文件Mybatis的配置类编写通用的更新语句可以覆盖的更新接口暂时无法覆盖的接口测试四&#xff1a;总结五&#xff1a;升华一&#xff1a;背景介绍 本篇博客是对项目开发中出现的单…

197.Spark(四):Spark 案例实操,MVC方式代码编程

一、Spark 案例实操 1.数据准备 电商网站的用户行为数据,主要包含用户的 4 种行为:搜索,点击,下单,支付 样例类: 2. Top10 热门品类 先按照点击数排名,靠前的就排名高;如果点击数相同,再比较下单数;下单数再相同,就比较支付数。 我们有多种写法,越往后性能越…

k8s学习之路 | k8s 工作负载 ReplicaSet

文章目录1. ReplicaSet 基础概念1.1 RS 是什么&#xff1f;1.2 RS 工作原理1.3 什么时候使用 RS1.4 RS 示例1.5 非模板 Pod 的获得1.6 编写 RS1.7 使用 RS1.8 RS 替代方案2. ReplicaSet 与 ReplicationController2.1 关于 RS、RC2.2 两者的选择器区别2.3 总结1. ReplicaSet 基础…

yii2项目使用frp https2http插件问题

yii2内网项目&#xff0c;使用frp进行内网穿透&#xff0c;使用 https2http插件把内网服务器http流量转成https&#xff0c;会存在一个问题&#xff1a;当使用 $this->redirect(...) 或 $this->goHome() &#xff08;其实用的也是前者&#xff09;等重定向时&#xff0c;…

物联网毕设 -- 智能厨房监测系统(改)

前言 在家庭生活中&#xff0c;厨房是必不可少的&#xff0c;所以厨房的安全问题关乎着我们大家的生命&#xff0c;所以提出智能厨房监测系统&#xff0c;目的就是为我们减少不必要的安全问题 ⚠️⚠️&#xff08;本文章仅提供思路和实现方法&#xff0c;并不包含代码&#x…

javaWeb在线考试系统

一、项目简介 本项目是一套javaWeb在线考试系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse 确保…

DBeaver连接mysql、oracle数据库

1. DBeaver连接mysql 1&#xff09; 下载DBeaver https://dbeaver.io/download/&#xff0c;并安装 2) 新建数据库连接 3&#xff09;选择mysql驱动程序 4&#xff09;填写连接设置内容 5&#xff09;点击 “编辑驱动设置”&#xff0c;并填写相关信息 6&#xff09;选择本地…

厦大纪老师chatgpt相关讲座3.7

在线更新数据&#xff0c;迭代学习训练&#xff0c;进而提高模型性能。 比较明显的是API部分&#xff0c;这一步学习的就是intruction,实现人机写作的复杂系统工程 数据充足&#xff0c;维基类似于百度百科 transformer结构更有优势&#xff0c;预测下一个字&#xff0c;模型越…

优思学院|盘点,精益生产25个工具!【必需收藏】

精益生产方法需要一种全面的方法才能有效实施。精益这个概念是每个接触产品供应链的人都要实践的&#xff0c;无论是在计划方面还是在分析方面。 精益生产工具有助于持续改进生产效率和产品或服务质量。精益工具是要减少 Muda &#xff08;浪费&#xff09;&#xff0c;从生产过…

6.4 深度负反馈放大电路放大倍数的分析

实用的放大电路中多引入深度负反馈&#xff0c;因此分析负反馈放大电路的重点是从电路中分离出反馈网络&#xff0c;并求出反馈系数 F˙\pmb{\dot F}F˙。 一、深度负反馈的实质 在负反馈放大电路的一般表达式中&#xff0c;若 ∣1A˙F˙∣>>1|1\dot A\dot F|>>1…

FPGA使用GTX实现SFP光纤收发SDI视频 全网首创略显高端 提供工程源码和技术支持

目录1、前言2、设计思路和框架3、vivado工程详解4、上板调试验证并演示5、福利&#xff1a;工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案&#xff1a; 一是使用专用编解码芯片&#xff0c;比如典型的接收器GS2971&#xff0c;发送器GS2972&#xff0c;优点是简…

MCM 箱模型建模方法及大气 O3 来源解析实用干货

OBM 箱模型可用于模拟光化学污染的发生、演变过程&#xff0c;研究臭氧的生成机制和进行敏感性分析&#xff0c;探讨前体物的排放对光化学污染的影响。箱模型通常由化学机理、物理过程、初始条件、输入和输出模块构成&#xff0c;化学机理是其核心部分。MCM (Master Chemical M…

机器学习中的数学——精确率与召回率

在Yolov5训练完之后会有很多图片&#xff0c;它们的具体含义是什么呢&#xff1f; 通过这篇博客&#xff0c;你将清晰的明白什么是精确率、召回率。这个专栏名为白话机器学习中数学学习笔记&#xff0c;主要是用来分享一下我在 机器学习中的学习笔记及一些感悟&#xff0c;也希…

自动化框架如何搭建?让10年阿里自动化测试老司机帮你搞定!自动化测试脚本怎么写?

一、何为框架&#xff1f;何为自动化测试框架&#xff1f; 无论是日常技术交流&#xff0c;还是在自动化测试实践中&#xff0c;经常会听到一个词叫&#xff1a;框架。之前对“框架”这个词知其然不知其所以然。现在看过一些资料以及加上我自己的一些实践有了我自己的一些看法…