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

一文带你入门angular(下)

一、angular  get数据请求

angular5.x之后get,post和服务器交互使用的是HttpClientModule模块。

1.首先要在app.module.ts中引入HttpClientModule并注入

import {HttpClientModule} from "@angular/common/http"

注入:

import:[
HttpClientModule
]

2.在用到的地方引入HttpClient并在构造函数声明

import {HttpClient} from "@angular/common/http"

constructor(public http:HttpClient){}

3.演示

header.component.ts

import { Component } from '@angular/core';
//引入
import { HttpClient } from "@angular/common/http"
@Component({selector: 'app-header',templateUrl: './header.component.html',styleUrls: ['./header.component.scss']
})
export class HeaderComponent {public list: any[] = []constructor(public http: HttpClient) {}ngOnInit() {}getData() {//服务器必须允许跨域let api = "http://a.itying.com/api/productlist"//因为angular底层封装请求的时候用的rejx,所以使用subscribethis.http.get(api).subscribe((response: any) => {// console.log(response);this.list = response.result})}
}

header.component.html

<button (click)="getData()">get请求</button>
<ul><li *ngFor="let item of list">{{item.title}}</li>
</ul>

二、angular  post提交数据

1.第一步同get操作的第一步一样引入注入HttpClientModule在app.moudle.ts

2.在用到的地方引入HttpClient,HttpHeaders并在构造函数中声明HttpClient

import { HttpClient,HttpHeaders } from "@angular/common/http"

3.代码演示

header.component.ts

import { Component } from '@angular/core';
//引入
import { HttpClient, HttpHeaders } from "@angular/common/http"
@Component({selector: 'app-header',templateUrl: './header.component.html',styleUrls: ['./header.component.scss']
})
export class HeaderComponent {public list: any[] = []constructor(public http: HttpClient) {}ngOnInit() {}getData() {//服务器必须允许跨域let api = "http://a.itying.com/api/productlist"//因为angular底层封装请求的时候用的rejx,所以使用subscribethis.http.get(api).subscribe((response: any) => {// console.log(response);this.list = response.result})}sendData() {//服务器必须允许跨域//手动设置请求类型const httpOptions = { headers: new HttpHeaders({ "Content-Type": "application/json" }) }let api = "http://127.0.0.1:3000/dologin"this.http.post(api, { "username": "zs", "age": 20 }, httpOptions).subscribe((response) => {console.log(response);})}
}

header.component.html

<button (click)="getData()">get请求</button>
<button (click)="sendData()">post请求</button>
<ul><li *ngFor="let item of list">{{item.title}}</li>
</ul>

三、angular  jsonp获取跨域数据

1.在app.moudle.ts中引入HttpClientMoudle,HttpClientJsonpModule并注入

import { HttpClientModule, HttpClientJsonpModule } from "@angular/common/http"

2.在用到的地方引入HttpClient并在构造函数声明

3.代码演示

import { Component } from '@angular/core';
//引入
import { HttpClient, HttpHeaders } from "@angular/common/http"
@Component({selector: 'app-header',templateUrl: './header.component.html',styleUrls: ['./header.component.scss']
})
export class HeaderComponent {public list: any[] = []constructor(public http: HttpClient) {}ngOnInit() {}getJsonp() {//jsonp请求,服务器必须得支持,不支持可以让后端调一下// http://a.itying.com/api/productlist的后面加上?callback=xxx在浏览器地址栏打开,改变xxx看数据变化,// 可以显示在地址中就能就受let api = "http://a.itying.com/api/productlist"this.http.jsonp(api, "callback").subscribe((res) => {console.log(res);})}
}

四、axios使用

1.建立一个service服务,引入到app.moudle.ts并在request.service.ts里封装axios,当然也可不用封装直接在组件引入axios

2.安装axios

npm i axios --save

3.用到的地方引入axios

import axios from 'axios';

4.代码演示

request.service.ts

import { Injectable } from '@angular/core';
import axios from 'axios';
@Injectable({providedIn: 'root'
})
export class RequestService {constructor() { }getAxios(api: any) {return new Promise((res, err) => {axios.get(api).then((res) => {console.log(res);}).catch(err => {console.log(err);})})}
}

header.component.ts

import { Component } from '@angular/core';
//引入
import { HttpClient, HttpHeaders } from "@angular/common/http"
//引入服务
import { RequestService } from 'src/app/services/request.service';
@Component({selector: 'app-header',templateUrl: './header.component.html',styleUrls: ['./header.component.scss']
})
export class HeaderComponent {public list: any[] = []constructor(public http: HttpClient, public requestService: RequestService) {}ngOnInit() {}getAxios() {let api = "http://a.itying.com/api/productlist"this.requestService.getAxios(api).then(data => {console.log(data);})}
}

header.component.html

<button (click)="getAxios()">axios获取数据</button>

五、路由

1.安装路由指令

--flat 把这个文件放进了 src/app 中,而不是单独的目录中。
--module=app 告诉 CLI 把它注册到 AppModule 的 imports 数组中。

ng generate module app-routing --flat --module=app

2.使用路由

找到app-routing.moudle.ts文件

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
// 引入组件
import { HeaderComponent } from './components/header/header.component';
import { FooterComponent } from './components/footer/footer.component';
import { FatherComponent } from './components/father/father.component';
import { ChildComponent } from './components/child/child.component';
const routes: Routes = [{ path: "header", component: HeaderComponent },{ path: "footer", component: FooterComponent },{ path: "father/:id", component: FatherComponent },{ path: "child", component: ChildComponent },//匹配不到路由的时候跳转的路由{ path: "**", redirectTo: "header" },
];@NgModule({imports: [RouterModule.forRoot(routes)],exports: [RouterModule]
})
export class AppRoutingModule { }

在app.component.html

<h1>我是app根组件</h1>
<!--routerLinkActive="active"点击当前高亮显示 在scss定义.active颜色   -->
<a [routerLink]="[ '/header']" routerLinkActive="active">去header组件</a>
<a [routerLink]="[ '/footer']" routerLinkActive="active">去footer组件</a>
<a [routerLink]="[ '/father',123]" routerLinkActive="active">去father组件</a>
<a [routerLink]="[ '/child']" routerLinkActive="active">去child组件</a>
<!-- 路由出口类似于vue router-view -->
<router-outlet></router-outlet>

3.路由动态传值

①get传值

header.component.html

<p>header组件</p>
<ul><li *ngFor="let item of list;let key=index"><!-- get传值[queryParams]="{id:key}" --><a [routerLink]="[ '/footer' ]" [queryParams]="{id:key,name:'zs'}">{{key}}--{{item}}</a></li>
</ul>

header.component.ts

import { Component } from '@angular/core';@Component({selector: 'app-header',templateUrl: './header.component.html',styleUrls: ['./header.component.scss']
})
export class HeaderComponent {public list: any[] = []ngOnInit(): void {for(var i = 0; i <= 5; i++) {this.list.push( `这是第${i}条数据`)}  }}

如何获得传递的参数

footer.component.ts

import { Component } from '@angular/core';
//如何获取路由传的值,先引入ActivatedRoute
import { ActivatedRoute } from '@angular/router';
@Component({selector: 'app-footer',templateUrl: './footer.component.html',styleUrls: ['./footer.component.scss']
})export class FooterComponent {constructor(public route: ActivatedRoute) {}ngOnInit(): void {// 这样拿取不到,会报错// console.log(this.route.queryParams.value);this.route.queryParams.subscribe(data => {console.log(data);//{id: '4', name: 'zs'}})}
}

②动态传值

首先路由表里面

{ path: "footer/:id", component: FooterComponent },

header.component.html

<p>header组件</p>
<ul><li *ngFor="let item of list;let key=index"><!-- key是动态路由 --><a [routerLink]="[ '/footer',key ]">{{key}}--{{item}}</a></li>
</ul>

footer.component.ts

import { Component } from '@angular/core';
//如何获取路由传的值,先引入ActivatedRoute
import { ActivatedRoute } from '@angular/router';
@Component({selector: 'app-footer',templateUrl: './footer.component.html',styleUrls: ['./footer.component.scss']
})export class FooterComponent {constructor(public route: ActivatedRoute) {}ngOnInit(): void {this.route.params.subscribe(data => {console.log(data);//{id: '5'}})}
}

相关文章:

一文带你入门angular(下)

一、angular get数据请求 angular5.x之后get&#xff0c;post和服务器交互使用的是HttpClientModule模块。 1.首先要在app.module.ts中引入HttpClientModule并注入 import {HttpClientModule} from "angular/common/http" 注入&#xff1a; import&#xff1a;[ …...

2023-3-6刷题情况

分巧克力 题目描述 儿童节那天有 KKK 位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 NNN 块巧克力&#xff0c;其中第 iii 块是 HiWiH_i \times W_iHi​Wi​ 的方格组成的长方形。 为了公平起见&#xff0c;小明需要从这 NNN 块巧克力中切出 KKK…...

一篇教你解决如何在不加锁的情况下解决多线程问题!

怎样在不加锁的情况下解决线程安全问题&#xff0c;你需要了解lock free和wait free这两个概念&#xff0c;在此之前我们先从最简单的有锁编程开始。 我们知道&#xff0c;多线程同时修改共享变量时会出现数据不一致的问题&#xff0c;比如多个线程同时对一个变量加1&#xff…...

OPT(奥普特)一键测量传感器SmartFlash高精度的四重保证

OPT&#xff08;奥普特&#xff09;一键测量传感器SmartFlash集成了机器视觉的边缘提取、自动匹配、自动对焦、自动学习及图像合成等人工智能技术&#xff0c;采用双远心光路及多角度照明系统设计&#xff0c;搭载高精度运动平台&#xff0c;并通过亚像素边缘提取算法处理图像&…...

网络协议丨从物理层到MAC层

我们都知道TCP/IP协议其中一层&#xff0c;就是物理层。物理层其实很好理解&#xff0c;就是物理攻击的物理。我们使用电脑上网时的端口、网线这些都属于物理层&#xff0c;没有端口没有路由你没有办法上网。网线的头我们叫水晶头&#xff0c;也是物理层的一份子。如果你的面前…...

【Maven】(五)Maven模块的继承与聚合 多模块项目组织构建

文章目录1.前言2.模块的继承2.1.可继承的标签2.2.超级POM2.3.手动引入自定义父POM3.模块的聚合3.1.聚合的注意事项3.2.反应堆(reactor)4.依赖管理及属性配置4.1.依赖管理4.2.属性配置5.总结1.前言 本系列文章记录了 Maven 从0开始到实战的过程&#xff0c;Maven 系列历史文章清…...

Linux 常用软件安装(jdk,redis,mysql,minio,kkFileView)

1.jdk安装 查询所有跟Java相关的安装的rpm包 rpm -qa | grep java卸载所有跟openjdk相关的包&#xff1a; 执行命令。删除以上除了noarch 结尾的所有文件 rpm -e --nodeps java-1.8.0-openjdk-1.8.0.252.b09-2.el8_1.x86_64 rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0…...

单链表及其相关函数

实现功能BuySListNode ————————————申请一个新节点并赋值SListLength —————————————计算链表的长度SListPushBack————————————尾插SListPushFront————————————头插SListPopBack—————————————尾删SListPopFront—…...

Linux段错误调试

1、设置ulimit ulimit -a 查看 ulimit -c 2048 设置core大小 2、设置core文件信息 下面两个设置需要在root下设置&#xff0c;否则权限不通过 echo 1>/proc/sys/kernel/core_uses_pid echo "/tmp/corefile-%e-%p-%t" >/proc/sys/kernel/core_pattern 3、编译…...

Gopro卡无法打开视频恢复方法

下边来看一个文件系统严重受损的Gopro恢复案例故障存储: 120G SD卡故障现象:客户正常使用&#xff0c;备份数据时发现卡无法打开&#xff0c;多次插拔后故障依旧。故障分析:Winhex查看发现0号分区表扇区正常&#xff0c;这应该是一个exfat格式的文件系统&#xff0c;但是逻辑盘…...

vmware虚拟机与树莓派4B安装ubuntu1804 + ros遇到的问题

如题所示&#xff0c;本人在虚拟机上安装ubuntu1804&#xff0c;可以很容易安装&#xff0c;并且更换系统apt源和ros源&#xff0c;然后安装ros&#xff0c;非常顺利&#xff0c;但是在树莓派4B上安装raspiberry系统就遇到了好多问题。 树莓派我烧录的是这个镜像&#xff1a;ub…...

JS逆向hook通用脚本合集

1. cookie 通用hook Cookie Hook 用于定位 Cookie 中关键参数生成位置&#xff0c;以下代码演示了当 Cookie 中匹配到了 v 关键字&#xff0c; 则插入断点 (function () {var cookieTemp ;Object.defineproperty(document, cookie, {set: function (val) {if (val.indexOf(v…...

nacos的介绍和下载安装(详细)

目录 一、介绍 1.什么是nacos&#xff08;含有官方文档&#xff09;&#xff1f; 2.nacos的作用是什么&#xff1f; 3.什么是nacos注册中心&#xff1f; 4.核心功能 二、下载安装 一、介绍 1.什么是nacos&#xff08;含有官方文档&#xff09;&#xff1f; 一个更易于…...

【算法经典题集】前缀和与数学(持续更新~~~)

&#x1f63d;PREFACE&#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐ 评论&#x1f4dd;&#x1f4e2;系列专栏&#xff1a;算法经典题集&#x1f50a;本专栏涉及到的知识点或者题目是算法专栏的补充与应用&#x1f4aa;种一棵树最好是十年前其次是现在前缀和一维前缀和k倍…...

寻找时空中的引力波:科学家控制量子运动至量子基态

据英国每日邮报报道&#xff0c;时空织布里的涟漪或可以揭示宇宙在140亿年前是如何产生的&#xff0c;然而寻找这些名为“引力波”的涟漪却一直难以捉摸。现在美国科学家们声称他们发现了改善用于检测宇宙大爆炸的引力波的探测器的方法。 ​宇宙大爆炸残留的引力波 美国加州理…...

第六讲:ambari-web 模块二次开发

上述图片为 Ambari 部署及操作 hdp 集群相关的部分界面截图。这些页面如果想调整的话,比如汉化,二次开发等,则可以修改 ambari-web 模块的源码来实现。 一、介绍 ambari-web 模块涉及到的界面有: HDP 集群部署向导已安装服务的仪表板、配置界面等主机列表及详细信息告警列…...

echarts--提示框显示不全问题记录

最近接手一个同事之前做的网页&#xff0c;发现里面使用echarts来绘制各类图表&#xff1b;有2个问题一个是提示框显示不全&#xff0c;另一个就是绘制总是有部分数据显示不全。后者就是div宽度问题。。。无语&#xff0c;说下前面一个问题吧&#xff0c;记录一下。 tooltip组…...

LeetCode 1653. 使字符串平衡的最少删除次数

LeetCode 1653. 使字符串平衡的最少删除次数 难度&#xff1a;middle\color{orange}{middle}middle Rating&#xff1a;1794\color{orange}{1794}1794 题目描述 给你一个字符串 sss &#xff0c;它仅包含字符 ′a′a′a′ 和 ′b′b′b′​​​​ 。 你可以删除 sss 中任意…...

聊一聊代码重构——程序方法和类上的代码实践

使用工厂方法取代构造方法 构造方法的问题 我们使用构造方法来初始化对象时候&#xff0c;我们得到的只能是当前对象。而使用工厂方法替换构造方法&#xff0c;我们可以返回其子类型或者代理类型。这让我们可以通过不同的实现类来进行逻辑实现的变化。 更重要的一点是&#…...

嵌入式学习笔记——寄存器开发STM32 GPIO口

寄存器开发STM32GPIO口前言认识GPIOGPIO是什么GPIO有什么用GPIO怎么用STM32上GPIO的命名以及数量GPIO口的框图&#xff08;重点&#xff09;输入框图解析三种输入模式GPIO输入时内部器件及其作用1.保护二极管2.上下拉电阻&#xff08;可配置&#xff09;3.施密特触发器4.输入数…...

开源工具Umi-OCR:PDF处理与文字提取的高效解决方案

开源工具Umi-OCR&#xff1a;PDF处理与文字提取的高效解决方案 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com/GitHub_…...

汉字破局:AI时代的文明反攻与英语世界的“偷师”真相

汉字破局&#xff1a;AI时代的文明反攻与英语世界的“偷师”真相今天我们要聊的&#xff0c;从来不是简单的“中文VS英文”语言之争&#xff0c;而是一场席卷AI世界的文明维度大反攻——三千年前刻在龟甲上的甲骨文&#xff0c;那些横平竖直、撇捺交错的线条&#xff0c;正在以…...

S32K144新手避坑指南:用S32DS for RAM配置GPIO输入输出,别再搞错推挽使能了

S32K144 GPIO配置实战&#xff1a;从原理到避坑的完整指南 第一次接触NXP S32K144的开发者&#xff0c;往往会在GPIO配置这个看似简单的环节栽跟头。特别是当你在调试按键检测或传感器信号读取时&#xff0c;明明硬件连接正确&#xff0c;代码逻辑也没问题&#xff0c;可就是无…...

LVGL实战:用外部按键(Keypad)和旋转编码器(Encoder)在无触摸屏设备上实现流畅UI交互

LVGL物理交互实战&#xff1a;用按键与编码器打造无触摸屏的流畅UI控制 在智能家居控制面板、工业HMI设备等场景中&#xff0c;物理按键和旋转编码器因其可靠性和低成本优势&#xff0c;成为触摸屏的理想替代方案。本文将深入探讨如何通过LVGL的输入设备子系统&#xff0c;实现…...

如何快速上手MOOTDX:Python量化分析者的通达信数据完整实战手册

如何快速上手MOOTDX&#xff1a;Python量化分析者的通达信数据完整实战手册 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx MOOTDX是一个专门为Python开发者设计的通达信数据接口封装库&#xff0…...

基于FPGA的智能车牌识别系统Verilog代码详解:含OV5640图像采集与HDMI显示功能...

基于FPGA的车牌识别系统verilog代码&#xff0c;包含verilog仿真代码&#xff0c;matlab仿真 OV5640采集图像&#xff0c;HDMI显示图像&#xff0c;车牌字符显示在车牌左上角&#xff0c;并且把车牌用红框框起。 正点原子达芬奇或者达芬奇pro都可以直接使用&#xff0c;fpga芯片…...

Matlab实战:5种方法可视化MIMO/SISO信道容量差异(附完整代码)

Matlab实战&#xff1a;5种方法可视化MIMO/SISO信道容量差异&#xff08;附完整代码&#xff09; 无线通信系统的性能评估离不开对信道容量的深入理解。对于刚接触多天线系统的学习者来说&#xff0c;如何直观比较不同天线配置下的性能差异是一个常见痛点。本文将用Matlab带你探…...

7个C++性能优化技巧:从LeetCode87算法实现中学习高效编程

7个C性能优化技巧&#xff1a;从LeetCode87算法实现中学习高效编程 【免费下载链接】leetcode &#x1f525;LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer&#xff08;第 2 版&#xff09;》、《程序员面试金典&#xff08;第 6…...

Gun.js数据验证终极指南:确保实时数据准确性的5大策略

Gun.js数据验证终极指南&#xff1a;确保实时数据准确性的5大策略 【免费下载链接】gun amark/gun: 是一个用于实现实时数据同步和通信的 JavaScript 库&#xff0c;可以方便地在 Web 应用中实现实时数据同步和通信。适合对 JavaScript、实时数据同步和想要实现实时数据同步的开…...

【开题答辩全过程】以 基于Java的影视设备维修评估系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…...