在Angular中为单个组件调用多个服务
发布时间:2020-12-17 17:03:35 所属栏目:安全 来源:网络整理
导读:我已经在角度调用了单个服务,但从未调用多个服务. 在我附加的图像中,要求是将客户端和组值添加到名为clientGroup Xref的表中.另外客户端,Clientrole,ClientKey在不同的表中(ClientService会这样做).我想知道如何在创建按钮单击的同时调用clientservice和clie
我已经在角度调用了单个服务,但从未调用多个服务. This is the code I tried so far import { Router } from '@angular/router'; import { AuthService } from './auth.service'; import {PESAuthService} from './pes_auth.service'; import { Component,OnInit,Injectable } from '@angular/core'; import { Http,Request,RequestMethod,RequestOptions,Headers,Response } from '@angular/http'; import { Observable } from 'rxjs/Observable'; import {Client} from './../../shared/models/Client'; @Injectable() export class ClientService implements OnInit { private appContent = 'application/json'; private _router: Router; private baseUrl = 'http://localhost:5050/api/v1/'; //Constructor to initialize authService to authenticate user,http to send the CRUD request and Router for the resource constructor(private authService: AuthService,private http: Http,private router: Router,private pesauthservice: PESAuthService) { } ngOnInit() { } //For creating a user Client,Key,Firstname and lastName has to be passed // created: Date create(client: string,clientkey: string,clientrole: string) :Observable<boolean> { //createAuthenticatedRequest is called before sending the Http request let request = this.createAuthenticatedRequest(JSON.stringify({client: client,clientkey: clientkey,clientrole: clientrole}),RequestMethod.Post); return this.http.request(request).map(r=>{ r.ok; }).catch((error: any) =>{ return Observable.throw(error); }); } update(id: number,client: string,clientKey: string,clientRole: string,created: Date) :Observable<any> { let request = this.createAuthenticatedRequest(JSON.stringify( {id:id,client: client,clientKey: clientKey,clientRole: clientRole,created: created}),RequestMethod.Put,id.toString()); return this.http.request(request).map(r=>{ r.json; console.log(r); }).catch((error: any) =>{ console.log(error); return Observable.throw(error); }); } delete(client: string,clientrole: string,created: Date):Observable<boolean> { let request = this.createAuthenticatedRequest(JSON.stringify({client: client,clientrole: clientrole,RequestMethod.Delete); return this.http.request(request).map(r=>{ r.ok; }).catch((error: any) =>{ return Observable.throw(error); }); } //Read method takes an optional input id,If id is not passed to read it will get the entire list,else it will get the record with specified id read(id?: Number):Observable<any> { id = (id == undefined) ? 0 : id ; if (id >0) // Get single resouce from Collection var request = this.createAuthenticatedRequest(null,RequestMethod.Get,id.toString()); else // Get the entire collection request = this.createAuthenticatedRequest(null,id.toString()); return this.http.request(request).map(r=>{ console.log(r.text()); return JSON.parse("[" + r.text() + "]")[0]; }).catch((error: any) =>{ return Observable.throw(error); }); } //This method accepts json of the attribtes client,key,firstname and lastName and request method(Post/Get/Put/delete) and //an optional parameter id,This method's return type is Request createAuthenticatedRequest(json : string,reqMethod: RequestMethod,optionalparam?: string) : Request{ //checks if the user is authenticated user with authentication service method isAuthenticated if (this.authService.isAuthenticated()) { if( this.pesauthservice.isPESAuthenticated()) { console.log('authenticated'); //creating a request object with method,url and body consisting of client,firstname and lastName and optional parameter id optionalparam =(optionalparam==undefined || optionalparam =='0') ? "" : optionalparam; const request = new Request({ method: reqMethod,url: this.baseUrl + 'clients/' + optionalparam +"",body: json }); //request header Authorization is added to specify that the request has an authenticated token request.headers.append('Authorization','Bearer ' + this.pesauthservice.getToken()); request.headers.append('Content-Type',this.appContent); request.headers.append('Accept',this.appContent); return request; } else { console.log('notauthenticated'); this._router.navigateByUrl('/login'); } } else { console.log('notauthenticated'); this._router.navigateByUrl('/login'); } } } 有人可以告诉我我应该考虑的方法. 解决方法
有很多方法可以做到这一点.你可以使用
Observable.forkjoin 或
Observable.merge
Object.forkJoin将等待所有请求完成,然后您可以使用此结果构建单个列表; forkjoin的示例 const allrequests = Observable.forkJoin( this.http.get('https://testdb1.com/.json').map((res: Response) => res.json()),this.http.get('https://testdb2.com/.json').map((res: Response) => res.json()) ) allrequests.subscribe(latestResults => { const [ data_changes,data_all ] = latestResults; }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |