У меня есть компонент страницы входа в систему, а также служба входа в систему, где я выполняю HTTP-вызов и получаю некоторые данные.В login.component.html при нажатии кнопки я запускаю функцию, которая, в свою очередь, запускает функцию, определенную в сервисе.Все это работает совершенно нормально.Теперь у меня есть другой компонент, где мне нужно использовать данные из этой службы входа в систему.Я думаю, что должен быть способ передачи данных между одноуровневыми компонентами или передачи непосредственно из службы в другой компонент.Я прошел через достаточное количество ресурсов по обмену данными и понял, но я не могу реализовать в моем текущем проекте.Может ли кто-нибудь помочь мне в этом, поскольку я все еще на этапе изучения Angular2?
Код службы входа в систему:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { LoginComponent } from './login/login.component';
import { switchMap, map } from 'rxjs/operators';
import { pipe } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class LoginService {
//primaryverifydata: object;
rootUrl = 'https://dev-510009.oktapreview.com/';
constructor(public _http: HttpClient) {}
primaryVerify1(userData) {
let data = {
username: userData.username,
password: userData.pass,
options: {
multiOptionalFactorEnroll: true,
warnBeforePasswordExpired: true
}
};
return this._http
.post(this.rootUrl + 'api/v1/authn', data, {
headers: {
'Content-type': 'application/json'
}
})
.pipe(
switchMap(response => {
if (response.status == 'MFA_ENROLL') {
let primaryverifydata = response;
console.log('primaryverifydata', primaryverifydata);
let data1 = {
factorType: 'token:software:totp',
provider: 'GOOGLE'
};
return this._http
.post(
this.rootUrl +
'api/v1/users/' +
primaryverifydata._embedded.user.id +
'/factors',
data1,
{
headers: {
'Content-type': 'application/json',
Authorization:
'SSWS 00e1Wq_tDwvikJt2ZufC0DgW58JX61R6BEQriGsvtl',
Accept: 'application/json'
}
}
)
.pipe(
map(response => {
if ((response.status = 'PENDING_ACTIVATION')) {
let enrollResponse = response;
window.open(
enrollResponse._embedded.activation._links.qrcode.href,
'_blank'
);
return response;
}
})
);
}
})
);
}
}
Код компонента входа в систему:
import { Component, OnInit } from '@angular/core';
import { LoginService } from '../login-service.service';
import { RouterModule, Routes, Router } from '@angular/router';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css'],
providers: [LoginService]
})
export class LoginComponent implements OnInit {
userData: object;
pass: any;
enrollResponse: object;
constructor(private loginservice: LoginService, private router: Router) {
this.userData = {};
this.pass = '';
this.enrollResponse = {};
}
ngOnInit() {}
primaryVerify() {
console.log(this.userData);
let some = this.loginservice
.primaryVerify1(this.userData)
.subscribe(data => console.log(data));
}
}
Второй компонент(где мне нужны данные):
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-mfa',
templateUrl: './mfa.component.html',
styleUrls: ['./mfa.component.css']
})
export class MFAComponent {
code: string;
rootUrl = 'https://dev-900317.oktapreview.com/';
constructor(public _http: HttpClient) {
this.code = '';
}
verify() {
let data = {
passCode: this.code
};
}
}