gpt4 book ai didi

angular - 在 Angular 中为单个组件调用多个服务

转载 作者:太空狗 更新时间:2023-10-29 18:08:07 25 4
gpt4 key购买 nike

enter image description here

我用 Angular 调用过单个服务,但从未调用过多个服务。在我附加的图像中,要求是将客户端和组值添加到名为 clientGroup Xref 的表中。还有不同表中的客户端、Clientrole、ClientKey(ClientService 会这样做)。我想知道如何在单击创建按钮时同时调用 clientservice 和 clientgroup Xref 服务。

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, clientkey: string, clientrole: string, created: Date):Observable<boolean> {

let request = this.createAuthenticatedRequest(JSON.stringify({client: client, clientkey: clientkey, clientrole: clientrole, created: created}),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,RequestMethod.Get, 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,key,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.forkjoinObservable.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;
});

关于angular - 在 Angular 中为单个组件调用多个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46590459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com