![](/img/trans.png)
[英]Can't assign JSON response data to $scope variable in AngularJS
[英]Angular 2 service data can't assign to variable in constructor
在我的Angular 2應用程序的構造函數中,我需要分配將數據返回給公共變量並顯示在html視圖中的服務函數。 控制台日志運行良好,但未顯示html數據。 所以我假設數據沒有分配給變量。 以下是我的代碼段。
export class ListComponent implements OnInit { public listname ="Laravel list"; constructor(private laraveldataservice: LaravelDataServiceService) { } public dataList = this.laraveldataservice.getUsers(); ngOnInit() { this.laraveldataservice.getUsers(); } }
基本上ng oninit數據正在控制台日志中加載。 但是dataList值未分配。
服務代碼,
getUsers(){ const url = 'http://localhost/laravel_app/public/api/users'; this.http.get(url).subscribe( res => { const data = res.json(); console.log(data); return data; } ); }
將其放在ngOnit內並在外部聲明變量
public dataList : any;
ngOnInit() {
this.dataList = this.laraveldataservice.getUsers();
}
您的console.log
有效,因為它會在您的Rx
訂閱中觸發。 由於調用的async
性質,您的dataList
永遠不會填充任何東西。 我在代碼中所做的就是將其轉換為promise
,然后await
它。
例:
async ngOninit() {
this.dataList = await this._httpClient
.get<TData>(url)
.toPromise();
}
試試這個片段
服務
private defaultDataSub = new Subject<any>();
onDefalultDataLoad = this.defaultDataSub.asObservable();
getUsers(){
const url = 'http://localhost/laravel_app/public/api/users';
this.http.get(url).subscribe(
res => {
const data = res.json();
this.defaultDataSub.next(data);
}
);
}
零件
import {Subscription} from "rxjs";
export class ListComponent implements OnInit, OnDestroy{
public listname ="Laravel list";
constructor(private laraveldataservice: LaravelDataServiceService) { }
public dataList;
public subscription:Subscription;
ngOnInit() {
this.subscription = this.laraveldataservice.onDefalultDataLoad.subscribe(data => {
this.dataList = data;
});
}
ngOnDestroy(){
this.subscription.unsubscribe();
}
}
您需要先設置
dataList
屬性,然后再從服務器獲取數據。 可能這是您遇到問題的原因
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.