加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 17:03:35 所属栏目:安全 来源:网络整理
导读:我已经在角度调用了单个服务,但从未调用多个服务. 在我附加的图像中,要求是将客户端和组值添加到名为clientGroup Xref的表中.另外客户端,Clientrole,ClientKey在不同的表中(ClientService会这样做).我想知道如何在创建按钮单击的同时调用clientservice和clie

enter image description here

我已经在角度调用了单个服务,但从未调用多个服务.
在我附加的图像中,要求是将客户端和组值添加到名为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,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.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;               
 });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读