Angular学习系列八:调用服务方法

1:创建服务:ng g service services/request

2:使用rxjs就需要在service 中引用: import { Observable } from ‘rxjs‘;

3:在组件中引用服务:

import { RequestService } from ‘../../services/request.service‘;

constructor(public req: RequestService)

4:学习目标:调用服务方法,使用回调方法获取服务方法,使用异步promise获取,使用rxjs异步获取数据

request.service.ts

 1 import { Injectable } from ‘@angular/core‘;
 2 import { Observable } from ‘rxjs‘;
 3 @Injectable({
 4   providedIn: ‘root‘
 5 })
 6 export class RequestService {
 7
 8   constructor() { }
 9
10   //同步方式
11   getData() {
12     alert("我是服务方法");
13   }
14
15   //回调方式
16   getCallbackData(cb) {
17     setTimeout(() => {
18
19       var username = ‘xiao ming--callback‘;
20       // return data;
21       cb(username);
22     }, 1000);
23   }
24
25   //promise
26   getPromiseData(){
27
28     return new Promise((resolve,reject)=>{
29
30       setTimeout(() => {
31         var username = ‘xiao ming--promise‘;
32         resolve(username);
33       }, 1000);
34     });
35   }
36
37   //rxjs
38   getRxjsData(){
39
40     return new Observable((obj)=>{
41
42       setTimeout(() => {
43         var username="xiao hong -- rxjs";
44         obj.next(username);
45       }, 3000);
46
47     });
48   }
49 }

home.component.ts

 1 import { Component, OnInit} from ‘@angular/core‘;
 2 import { RequestService } from ‘../../services/request.service‘;
 3 @Component({
 4   selector: ‘app-home‘,
 5   templateUrl: ‘./home.component.html‘,
 6   styleUrls: [‘./home.component.css‘]
 7 })
 8 export class HomeComponent implements OnInit {
 9
10   constructor(public req: RequestService) { }
11
12   ngOnInit() {
13   }
14
15   getServiceMethod() {
16     this.req.getData();
17   }
18
19
20   //回调 获取异步数据
21   getAsyncMethod() {
22     this.req.getCallbackData((uname) => {
23       alert(uname);
24     })
25   }
26
27   //promise获取异步数据
28   getPromiseMethod() {
29     var pro = this.req.getPromiseData();
30     pro.then((data) => {
31       alert(data);
32     });
33   }
34
35   //rxjs获取异步数据
36   getRxjsMethod() {
37
38     var rxjsdata = this.req.getRxjsData();
39     var start = rxjsdata.subscribe((data) => {
40       alert(data);
41     });
42
43
44   }
45
46
47   removeRxjsMethod() {
48
49     var rxjsdata = this.req.getRxjsData();
50     var start = rxjsdata.subscribe((data) => {
51       alert(data);
52     });
53
54     setTimeout(() => {
55       start.unsubscribe();//取消订阅:由于上面方法执行3s中,在1s后,就取消了该请求
56     }, 1000);
57   }
58
59 }

home.component.html

 1 <button (click)="getServiceMethod()">我可以调用服务里面的方法哦(同步)</button>
 2 <br>
 3
 4 <button (click)="getAsyncMethod()">我可以调用服务里面的方法哦(异步-callback)</button>
 5 <br>
 6
 7 <button (click)="getPromiseMethod()">我可以调用服务里面的方法哦(异步-promise)</button>
 8 <br>
 9 <button (click)="getRxjsMethod()">我可以调用服务里面的方法哦(异步-rxjs)</button>
10 <br>
11 <button (click)="getRxjsMethod()">我可以调用服务里面的方法哦(rxjs,取消订阅)</button>
12 <p>home works!</p>
13 <hr>

界面效果:

原文地址:https://www.cnblogs.com/hanliping/p/12159101.html

时间: 2024-08-01 20:33:49

Angular学习系列八:调用服务方法的相关文章

angular学习笔记(八)

本篇介绍angular控制视图的显示和隐藏: 通过给元素添加ng-show属性或者ng-hide属性来控制视图的显示或隐藏: ng-show: 绑定的数据值为true时,显示元素,值为false时,隐藏元素 ng-hide: 绑定的数据值为true时,隐藏元素,值为false时,显示元素 (其实只要用到其中一个就可以了) 下面来看个简单的例子,点击按钮可以显示/隐藏元素: <!DOCTYPE html> <html ng-app> <head> <title>

MVC学习系列[email&#160;protected]辅助方法和用户自定义HTML方法

在HTML Helper,帮助类的帮助下,我们可以动态的创建HTML控件.HTML帮助类是在视图中,用来呈现HTML内容的.HTML帮助类是一个方法,它返回的是string类型的值. HTML帮助类,分成三个类型: Inline HTML helpers[内联的HTML帮助类,例如@Html.Label等] Built-in HTML helpers[也就是嵌套的HTML帮助类,即@helper辅助方法] Custom HTML helpers[自定义的HTML帮助类] 在这里,我们学习第二种,

通过bindservice方式调用服务方法里面的过程

为什么要引入bindService:目的为了调用服务里面的方法 (1)定义一个服务 服务里面有一个方法需要Activity调用 (2)定义一个中间人对象(IBinder) 继承Binder (3)在onbind方法里面把我们定义的中间人对象返回 (4)在Activity的oncreate 方法里面调用bindservice 目的是为来获取我们定义的中间人对象 (4.1)获取中间人对象 (5)拿到中间人对象后就可以间接的调用到服务里面的方法 public class TestService ext

Linux学习系列八:操作网口

一些相对高性能的单片机会带以太网接口,网口在MCU里算是比较复杂的外设了,因为它涉及到网络协议栈,通常情况下网络协议栈会运行在一个RTOS中,所以对普通单片机开发者来说网口使用起来相对难度较大一些.在Linux下网口是一个经常使用的接口,由于Linux具备成熟完备的网络通信协议栈,底层驱动厂家也都提供好了,所以使用起来相对方便的多.本篇对Linux下网口使用做个简单总结,希望对大家有所帮助. 内容主要包括使用buildroot来是实现ssh功能,UDP通信的例子,以及实际中容易犯的一个错误. 原

目标跟踪学习系列八:Struck:Structured Output Tracking with Kernels(2011 ICCV)

看来人机交互不是我想象的那么简单的,还是要花很多的功夫来打基础的.于是再来学习Tracking相关的一些文章算法. 在认真的学习了压缩跟踪(CT)以后,确实觉得自己对Tracking有了比较好的了解.但是看了在测试集上面的效果,被欺骗了原来CT的效果在真实的摄像头上面是很差劲的.唯一的优点就是快. 因此,还得回来学习一些其他的精度比较高的方法!这里选择了Struck.是大牛学长推荐的.同时本文使用了非线性的SVM算法,也想顺便的学习一下. 文章代码的位置:http://www.samhare.n

MVC3+EF4.1学习系列(八)-----利用Repository and Unit of Work重构项目

项目最基础的东西已经结束了,但是现在我们的项目还不健全  不利于测试 重复性代码多   层与层之间耦合性高  不利于扩展等问题.今天的这章 主要就是解决这些问题的.再解决这些问题时,自己也产生了很多疑问,理解的也并不是很透彻 ,希望我的疑问能在这里得到解答~~ 一.模式介绍 1.Repository 在<企业架构模式>中,通过用来访问领域对象的一个类似集合的接口,在领域与数据映射层之间进行协调.还有请大家参考这个  P OF EAA详细介绍 然后说下我对这个的感觉和疑问   怎么都觉得这个Re

第52天学习python 子类调用父类方法

#子类中调用父类#初步程序# class Vehicle:#定义交通工具# Country="China"# def __init__(self,name,speed,load):# self.name=name# self.spedd=speed# self.load=load## def run(self):# print("开动了")## class Subway(Vehicle):#定义个地铁# def __init__(self,name,speed,lo

SpringCloud学习系列-Rest微服务构建-整体父工程Project

总体介绍 承接着我们的springmvc+mybatis+mysql初级高级课程,以Dept部门模块做一个微服务通用案例Consumer消费者(Client)通过REST调用Provider提供者(Server)提供的服务    Maven的分包分模块架构   一个Project带着多个Module子模块  MicroServiceCloud父工程(Project)下初次带着3个子模块(Module) microservicecloud-api 封装的整体Entity/接口/公共配置等 micr

Angular学习系列二:显示数据

使用vscode打开前期准备的项目 1:创建header组件: ng g component components/header 2:在app.component.html中,引用该标签: <app-header></app-header> 3:数据绑定  :  属性,数据,带有标签数据,数据循环,图片,ngSwitch,ngClass,事件(click,keydown,keyup),双向数据绑定 前端界面(header.component.html )代码: 1 <p>