0
我有與json json文件。阿洛斯有服務,其中獲得URL稱爲ConfigurationService.ts和方法:getConfiguration(key);如何以正確的方式訂閱getUrl。 Angular 2
api應該像這樣工作:獲取網址,並在運行verifyLogin()和當前url之後; 但我有訂閱問題,我認爲有一個簡單的方法。 這裏是configurationService.ts:
import {Injectable} from '@angular/core';
import {Http, Response} from '@angular/http';
import {Headers, RequestOptions} from '@angular/http';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class ConfigurationService {
constructor(private http:Http) {
}
private result: Object;
getConfiguration(key) {
return this.http.get('./app/config/config.json').map((res: Response) => {
this.result = res.json();
return this.result[key];
});
}
}
這裏是身份驗證服務:
import {Injectable} from '@angular/core';
import {Http, Response} from '@angular/http';
import {Headers, RequestOptions} from '@angular/http';
import {Observable} from 'rxjs/Observable';
import {HttpBaseClass} from './http_base_class';
import {ConfigurationService} from '../config/configuration_service';
@Injectable()
export class AuthenticationService extends HttpBaseClass {
result: {
ok: boolean;
};
private verifyUrl = '';
private logoutUrl = '';
constructor (private http: Http, private configurationService: ConfigurationService) {
super(http);
}
private authRequest (url) {
let body = JSON.stringify({});
let headers = new Headers({ 'Content-Type': 'application/json'});
let options = new RequestOptions({
headers: headers
});
return this.http.post(url, body, options)
.map((res: Response) => res.json())
.map(res => {
this.result = res;
return this.result.ok;
});
}
//test - how to put received url into this.authRequest(this.verifyUrl) ??
// private x = this.configurationService.getConfiguration("verifyUrl").subscribe((result) => console.log(result));
//verify runs in appComponent oninit.
verifyLogin() {
return this.authRequest(this.verifyUrl);
}
logout() {
return this.authRequest(this.logoutUrl);
}
}
HomeComponent.ts以防萬一:
ngOnInit() {
// check isLogged in
this.isLogged();
}
//check if logged in
isLogged() {
this.authenticationService.verifyLogin().subscribe((result) => {
if (result) {
this.structureRequest.sendRequest().subscribe((result) => this.viewNodes(result));
//makes http request and puts result into contantArray
} else if (result === false) {
this.router.navigate(['/login']);
}
});
}
更新: 我我試圖以下一種方式設置verifyLogin()方法。但是,出現錯誤:「類型錯誤:this.authenticationService.verifyLogin(...)認購不是一個函數」
verifyLogin() {
return this.configurationService.getConfiguration("verifyUrl")
.subscribe((url) => {
// this.verifyUrl = url;
this.authRequest(url);
});
}
讓我試試吧。你認爲this.verifyUrl = url會比veryfiLogin()首先運行? – Serhiy
嗯,是的,可能會出現競賽狀況,我會在第二秒提出一個不同的解決方案。 – rinukkusu
無法正常運行驗證方法運行時,url仍爲空。 – Serhiy