ZadarrienChina 2020-01-07
1:创建服务:ng g service services/request
2:使用rxjs就需要在service 中引用: import { Observable } from ‘rxjs‘;
3:在组件中引用服务:
import { Injectable } from ‘@angular/core‘;
import { Observable } from ‘rxjs‘;
@Injectable({
providedIn: ‘root‘
})
export class RequestService {
constructor() { }
//同步方式
getData() {
alert("我是服务方法");
}
//回调方式
getCallbackData(cb) {
setTimeout(() => {
var username = ‘xiao ming--callback‘;
// return data;
cb(username);
}, 1000);
}
//promise
getPromiseData(){
return new Promise((resolve,reject)=>{
setTimeout(() => {
var username = ‘xiao ming--promise‘;
resolve(username);
}, 1000);
});
}
//rxjs
getRxjsData(){
return new Observable((obj)=>{
setTimeout(() => {
var username="xiao hong -- rxjs";
obj.next(username);
}, 3000);
});
}
}home.component.ts
import { Component, OnInit} from ‘@angular/core‘;
import { RequestService } from ‘../../services/request.service‘;
@Component({
selector: ‘app-home‘,
templateUrl: ‘./home.component.html‘,
styleUrls: [‘./home.component.css‘]
})
export class HomeComponent implements OnInit {
constructor(public req: RequestService) { }
ngOnInit() {
}
getServiceMethod() {
this.req.getData();
}
//回调 获取异步数据
getAsyncMethod() {
this.req.getCallbackData((uname) => {
alert(uname);
})
}
//promise获取异步数据
getPromiseMethod() {
var pro = this.req.getPromiseData();
pro.then((data) => {
alert(data);
});
}
//rxjs获取异步数据
getRxjsMethod() {
var rxjsdata = this.req.getRxjsData();
var start = rxjsdata.subscribe((data) => {
alert(data);
});
}
removeRxjsMethod() {
var rxjsdata = this.req.getRxjsData();
var start = rxjsdata.subscribe((data) => {
alert(data);
});
setTimeout(() => {
start.unsubscribe();//取消订阅:由于上面方法执行3s中,在1s后,就取消了该请求
}, 1000);
}
}home.component.html
<button (click)="getServiceMethod()">我可以调用服务里面的方法哦(同步)</button> <br> <button (click)="getAsyncMethod()">我可以调用服务里面的方法哦(异步-callback)</button> <br> <button (click)="getPromiseMethod()">我可以调用服务里面的方法哦(异步-promise)</button> <br> <button (click)="getRxjsMethod()">我可以调用服务里面的方法哦(异步-rxjs)</button> <br> <button (click)="getRxjsMethod()">我可以调用服务里面的方法哦(rxjs,取消订阅)</button> <p>home works!</p> <hr>
界面效果:


