[英]Angular 2 - Can't pass value to model - Javascript, Typescript
[英]typescript/angular pass value out of this?
因此,在普通的javascript中,如果我想為變量分配一個值,然后在函數外部使用該值,可以先聲明該變量,然后在函數中定義它的值來完成。 我是打字稿和棱角游戲的新手,所以我不知道該怎么做。
在下面的代碼中,我試圖從服務中的方法獲取值,然后將該值傳遞給我的返回值。 (我希望這是有道理的)。 但是,我一直在console.log(url)
上得到未定義,沒有其他錯誤。
emailsAPI() {
let url: any
this.apiUrlsService.urlsAPI().subscribe(
data => {
this.results = data
url = this.results.emails
}
);
console.log(url)
return this.http.get('assets/api/email_list.json')
}
api-urls服務:
import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
@Injectable()
export class ApiUrlsService {
constructor(
private http: HttpClient
) { }
urlsAPI () {
return this.http.get('assets/api/api_urls.json')
}
}
那是因為你調用異步方法subscribe
,然后試圖登錄來臨前值訂閱解決。 在將this.results.emails
分配給url
變量之后,將最后兩個語句(console.log和return)放在花括號內
emailsAPI(): Observable<any> {
let url: any
return this.apiUrlsService.urlsAPI()
.flatMap(data => {
this.results = data
url = this.results.emails
// you can now access url variable
return this.http.get('assets/api/email_list.json')
});
}
根據反應式編程,這是您得到的預期行為。 由於訂閱方法是異步的,因此稍后在接收數據時會得到結果。 但是您的控制台日志在同步線程中被調用,因此在您定義subscribe方法時將立即調用它。 如果要打印控制台。 將其放在您的訂閱數據塊中。
更新:
根據您的要求,您應該返回Subject而不是Observable,因為Subject是數據使用者和數據生產者。 因此,它將使用來自電子郵件的httpget請求的數據,並在您調用emailsAPI方法的方法中充當方法的生產者。
emailsAPI(): Subject<any> {
let emailSubject:Subject = new Subject();
this.apiUrlsService.urlsAPI()
.flatMap(data => {
this.results = data
return this.results.emails;
}).
subscribe(url=> {
this.http.get(your_email_url_from_url_received).subscribe(emailSubject);
});
return emailSubject;
}
可以像在calee方法中使用Observable一樣訂閱該主題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.