前端Angular框架基础知识(一)

这篇具有很好参考价值的文章主要介绍了前端Angular框架基础知识(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、组件模板

1.1 数据绑定

数据驱动DOM:将组件(.ts文件)中的数据显示在组件模板(.html文件)中,当类中的数据发生变化会自动同步到模板中.

Angular中使用差值表达式进行数据绑定,{{ }}语法

<h2>{{ message }}</h2>
<p [innerHtml] = “htmlString”></p> //显示html标记,渲染出h1样式
<h2>{{ getInfo() }}</h2>
<h2>{{ a === b ? ‘相等’ : ‘不等’}}</h2>
<h2>{{ ‘angular’}}</h2>            //显示angular字符串
export class AppComponent {
    message: string = "Hello Angular"
    htmlString: string = "<h1>Hello</h1>"
    getInfo(){
        return "返回的内容"
    }
}
1.2 属性绑定
1.2.1 普通属性

使用【属性名称】为元素绑定DOM对象属性

使用【attr.属性名称】为元素绑定HTML标记属性

<img [src]="imgUrl" />
<div [attr.data-text]="title"></div>
1.2.2 class属性

动态为元素添加类名

//isActive是一个boolean值,如果为真,则为button添加类名active
<button class="btn" [class.active]="isActive"></button>
<div [ngClass]="{active:true, error:true}"></div>
1.2.3 style属性

动态为元素添加行内样式

//[style.样式]判断isActive是否为真,如果为真,则背景颜色为blue,否则为红色
<button [style.backgroundColor]="isActive? 'blue : 'red' "></button>
<div [style.width]="'200px'"></div>
//可以同时添加多个样式
<div [ngStyle]="{backgroundColor:'red', width:'200px', height:'300px'}"></div>
1.3 事件绑定
<button (click)="onSave($event)">按钮</button>
export class AppComponent {
    title = "Angular"
    onSave(event: Event){
        this.title
    }
}
1.4双向数据绑定

数据在组件类和组件模板中双向同步。

Angular将双向数据绑定功能放在了@angular/forms模块中,所以要实现双向数据绑定需要依赖该模块。

import { FormsModule } from "@angular/forms"

export class AppComponnet {
	username: string = " ";
	setData(){
		this.username = "hello angular"
	}
}

<input type="text" [(ngModel)]="username"/>
<button (click)="setData">更改数据</button>
1.5 内容投影
//app.componnet.html
<app-demo>
	//想把这两个内容投影到app-demo组件内部
	<ng-container class="aaa">a</ng-container> 
	<div class="bbb">b</div>
</app-demo>
//app-demo.componnet.html
<div>
//ng-content在浏览器中会被<div class="aaa">a</div> 
	<ng-content select=".aaa"></ng-content>
</div>
<ng-container>
	<ng-content select=".bbb"></ng-content>
</ng-container>
1.6 获取原生DOM对象
//1.在模板中获取,这个button模板的自定义名字就叫myBtn
<button #myBtn (click)="onclick(myBtn)">bbb</button>

onclick(button: ElementRef<HTMLButtonElement>){
conosole.log()
}

//2.在类中获取,使用ViewChild装饰器获取一个dom对象,ViewChildren获取一组元素
<p #paragraph>hello</p>

@ViewChild("paragraph") para: ElementRef<HTMLParagraphElement> | undefined
ngAfterViewInit(){
	console.log(this.para?.nativeElement)
}

<ul>
	<li #items>a</li>
	<li #items>b</li>
	<li #items>c</li>
</ul>

@ViewChildren("items") items: QueryList<HTMLLIElement> | undefined
ngAfterViewInit(){
	console.log(this.items?.toArray)
}

二、指令Directive

指令的作用是简化DOM操作
属性指令:修改一个现有元素的外观和行为,使用 [ ]包裹;
结构指令:通过在中添加、移除和替换元素来修改布局,结构指令使用*作为指令前缀;

2.1 内置指令
[hidden]
*ngIf
*ngFor

<div *ngIf="data.length>0; then dataList else noData"></div>
<ng-tempalte #dataList>课程列表</ng-templete>
<ng-tempalte #noData>无数据</ng-templete>
2.2 自定义指令

需求:为元素设置默认背景颜色,鼠标移入时的背景颜色以及移出时的背景颜色

//在需要使用指令的模板中添加指令的名字即可,这里指令的名字就叫appHover,如果需要绑定动态数据,就需要在指令名字后面添加中括号
<div [appHover]="{bgColor:'blue'}">Hello</div>

//hover.directive.ts
import { Directive,AfterViewInit,ElementRef } from '@angular/core"
//接收参数类型
interface Optins {
	bgColor?:string
}
@Directive({
	selector: '[appHover]'
})
export class HoverDirective implements AfterViewInit{
	@Input("appHover") appHover: Options = {}; //接收参数
	element: HTMLElement; //要操作的DOM节点
	construcor(private elementRef: ElementRef){
		this.element = this.elementRef.nativeElement; //获取要操作的DOM节点
	}
	ngAfterViewInit(){ //模板初始化完成后设置元素背景颜色
		this.element.style.backgronudColor = this.appHover.bgColor || 'pink';
	}
	@HostListener('mouseenter') enter(){ //为元素添加鼠标移入事件
		this.element.style.backgroundColor = 'red';
	}
}

三、管道pipe

格式化模板数据

3.1 内置管道
date 日期格式化
currency 货币格式化
uppercase 转大写
lowercase 转小写
json 格式化json数据
{{ date | date: "yyyy-MM-dd" }}
3.2 自定义管道

需求:制定字符串不超过规定长度

//summary.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
@Pipe ({
	name:'summary' //管道名字
});
export class SummaryPipe implements PipeTransform {
	transform(value:string, limit?:number){
		if(!value) return null;
		return value.substr(0, limit) + '...';
		}
	}
//app.module.ts
import { SummaryPipe } from './summary.pipe'
@NgModule({
	declarations:[
		SummaryPipe
	]
})
<div>{{ paragraph | summary:20 }}</div>

四、组件通信

4.1 向组件内部传递数据
//app.component.html
<app-person name="zs" age="18"></app-person>
//app-person.ts
@Input("name") myName: string = " ";
@Input("age") myAge: number = 0;
//app-person.html
<div>{{myName}} {{myAge}}</div>
4.2 向组件外部传递数据
//子组件
<button (click)="onClick()"></button>

@Output() sendData = new EventEmitter()
onClick(){
	this.sendData.emit("子组件中数据")//触发自定义事件sendData()
}

//父组件
<app-person (sendData)="getData($event)"></app-person>

getData(event:string){
	alert(event)
}

五、生命周期

5.1、挂载阶段

挂载阶段的生命周期函数只在挂载阶段执行一次,数据更新不及时

  • constructor:实例化组件类时候执行,可以用来接收注入的服务实例对象
  • ngOnInit:首次接收到输入属性值后执行,在此处可以执行请求操作;
  • ngAfterContentInit:当内容投影初始化渲染完成后调用
  • ngAfterViewInit:当组件视图渲染完成后调用
5.2、更新阶段

1.ngOnChanges

  • 当输入属性值发生变化时执行,初始设置时也会执行一次,顺序优于ngOnInit
  • 不论多少输入属性同时变化,钩子函数只会执行一次,变化的值会同时存储在参数中
  • 参数类型为SimpleChanges,子属性类型为SimpleChange
  • 对于基本数据类型,只要值发生变化就可以检测到
  • 对于引用数据类型,可以检测到从一个对象变成另一个对象,但检测不到同一个对象中属性值的变化,但不影响组件模板更新数据

2.ngDoCheck:主要用于调试,只要输入属性变化,都会执行
3.ngAfterContenntChecked:内容投影更新完成后执行
4.ngAfterViewChecked:组件视图更新完成后执行

5.3、卸载阶段

ngOnDestroy: 组件被销毁之前调用,用于清理操作文章来源地址https://www.toymoban.com/news/detail-798937.html

到了这里,关于前端Angular框架基础知识(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript 框架比较:Angular、React、Vue.js

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。这些首字母相同的选项各自代表不同的技术加工具组合。为了在这些技术栈中做出明智选择,让我们先从核心组件聊起,再对各自前端框架(React、Angular 和 Vue)进行简化比

    2024年01月20日
    浏览(56)
  • 前端开发框架生命周期详解:Vue、React和Angular

    作为前端开发者,掌握前端开发框架的生命周期是非常重要的。在现代Web应用开发中,Vue.js、React和Angular是三个最流行的前端开发框架。本篇博客将详细解读这三个框架的生命周期,包括每个阶段的含义、用途以及如何最大限度地利用它们。通过详细的代码示例和实用的技巧

    2024年02月13日
    浏览(51)
  • 前端面试:【Angular】打造强大Web应用的全栈框架

    嗨,亲爱的Angular探险家!在前端开发的旅程中,有一个全栈框架,那就是 Angular 。Angular提供了模块化、组件化、依赖注入、路由和RxJS等特性,助力你构建强大、可扩展的Web应用。 1. 什么是Angular? Angular是一个由Google开发的JavaScript框架,用于构建现代Web应用。它是一个全栈

    2024年02月11日
    浏览(40)
  • 前端框架之战:React vs Vue vs Angular

    前端框架在现代网页开发中扮演着越来越重要的角色,它们为开发者提供了一种更高效、可扩展的方式来构建复杂的用户界面。在过去的几年里,我们看到了许多前端框架和库的出现,如React、Vue和Angular等。这三个框架分别由Facebook、Google和AngularJS团队开发,它们都是目前最

    2024年02月03日
    浏览(49)
  • 一文搞定:前端如何选择Angular、React和Vue三大主流框架

    在前端开发领域,目前最流行的三个框架是Angular、React和Vue.js。这些框架非常高效,并且它们各自具有一系列的优缺点。 在AI辅助编程工具 CodeGeeX 的后台中,也看到有大量的前端开发者使用这三个框架,并且Vue的使用率在 CodeGeeX 的后台中,持续走高。接下来我们针对Angular、

    2024年02月09日
    浏览(54)
  • JavaScript框架 Angular、React、Vue.js 的全栈解决方案比较

    在 Web 开发领域,JavaScript 提供大量技术栈可供选择。其中最典型的三套组合,分别是 MERN、MEAN 和 MEVN。前端框架(React、Angular 和 Vue)进行简化比较。 MERN 技术栈包含四大具体组件: MongoDB:一款强大的 NoSQL 数据库,以灵活的 JSON 格式存储数据。 Express.js:一套极简但强大的

    2024年02月03日
    浏览(54)
  • 2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较

    🎉欢迎来到Java学习路线专栏~探索2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:Java学习路线 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 🍹文章作者技术和水

    2024年02月11日
    浏览(47)
  • angular前端环境搭建、安装angular

    1.下载node.js安装包(要求node版本大于12.20) Node.js官方网站 : https://nodejs.org/en/ 进入官网后,当前页面下载的是最新版本,如需要下载历史版本,点击红框标注的其他下载,在进入的新的页面底部,选择红框标准的先前版本,然后下载相应的版本,在跳转的页面下载win64的版

    2024年02月03日
    浏览(56)
  • 内存管理框架 --- 基础知识

    早期的计算机, 程序是直接运行在物理内存上 。也就是程序在运行的过程中,直接访问的是物理地址。 如果这个系统只运行一个程序,只要这个程序所需的内存不要超过该机器的物理内存就不会出现问题,也就不需要考虑内存管理,反正就一个程序,就这么点内存,够不够

    2024年02月11日
    浏览(46)
  • 【Thinkphp 6】框架基础知识

    use进行引入,然后继承基础的方法 入口文件(index.php)可以省略 在app里新建文件夹,并将相应的控制器(controller)放到新建的文件夹下 遵守类名和文件名一致,空间名和文件夹名一致 重命名为 .env 在controller下面定义个Error.php 看下composer.json 当方法使用驼峰命名法是,如

    2023年04月27日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包