在我的 Angular 服務腳本(以下代碼段)中,我通過 Django 從我的 MongoDB 資料庫接收了一個客戶資料字典:
getConsumersMongodb(): Observable<any> {
return this.httpClient.get(`${this.baseMongodbApiUrl}`);
}
回來的字典是這樣的:
{
"message": "Got all consumers' info successfully!",
"consumers": {
"id": 8,
"age": "51 - 60",
"gender": "Female"
...
},
"error": "Error!"
}
我只對消費者資料感興趣,所以我在我的 Angular 組件 TypeScript 代碼中決議它,如下所示:
ngOnInit(): void {
this.dbService.getConsumersMongodb()
.subscribe(responseData => {
this.loadedConsumersDict = responseData;
this.consumersInfo = this.loadedConsumersDict["consumers"]);
console.log(this.consumersInfo);
});
}
當然,在我的開發控制臺中,我得到了這個:
{id: 8, age: '51 - 60', gender: 'Female', …}
到現在為止還挺好...
現在,我需要將此 json 物件轉換為可迭代物件,例如陣列,以便我可以查看其欄位并將它們顯示在我的 Angular html 模板中。
所以,我修改了我的代碼:
ngOnInit(): void {
this.dbService.getConsumersMongodb()
.subscribe(responseData => {
this.loadedConsumersDict = responseData;
this.consumersInfo = this.loadedConsumersDict["consumers"]);
let temp = this.loadedConsumersDict["consumers"];
this.loadedConsumersArray = Object.keys(temp).map(function (key) {
return { [key]: temp[key] };
});
console.log(this.loadedConsumersArray);
});
}
但這給了我以下內容:
{id: 8}
{age: '51 - 60'}
{gender: 'Female'}
...
這不是我想要的。如何將內容放入可迭代物件中,以便我可以簡單地在 html 模板代碼中使用以下代碼段來顯示欄位?
<li class="list-group-item" *ngFor="let consumer of loadedConsumersArray">
<p><i>Id:</i> {{ consumer.id }}</p>
<p><i>Gender:</i> {{ consumer.gender }}</p>
<p><i>Age Group:</i> {{ consumer.age }}</p>
...
我已經走了很長一段路來實作這一目標,但現在我很困惑,需要幫助。我將不勝感激任何幫助。
編輯:
This is what I have written in my Django's views.py script:
@csrf_exempt
@api_view(['GET', 'POST', 'DELETE'])
def handle_consumer(request):
if request.method == 'GET':
try:
consumers = ConsumerModel.objects.all()
consumers_serializer = ConsumerModelSerializer(consumers, many=True)
# Fetch consumer data from MongoDB.
print(consumers_serializer.data)
# end fetch region
response = {
'message': "Got all consumers' info successfully!",
'consumers': consumers_serializer.data[0],
'error': "Error in GET try"
}
return JsonResponse(response, status=status.HTTP_200_OK)
except:
error = {
'message': "Fail! Cannot get all consumers!",
'consumers': "[]",
'error': "Error in GET except"
}
return JsonResponse(error, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
The print statement prints this:
[OrderedDict([('id', 8), ('age', '51 - 60'), ('gender', 'Female'), ...])]
Because it always contains one item in this Python list, I do:
consumers_serializer.data[0]
to ensure that the response I get is this:
{'id': 8, 'age': '51 - 60', 'gender': 'Female', ...}
uj5u.com熱心網友回復:
consumers在回應中是一個物件而不是一個陣列。因此,您不需要將任何內容轉換為陣列,*ngFor如果您不需要,當然也不需要使用。
只需確保這consumersInfo是一個公共屬性,然后在您的模板中寫入以下內容:
<li class="list-group-item">
<p><i>Id:</i> {{ consumersInfo.id }}</p>
<p><i>Gender:</i> {{ consumersInfo.gender }}</p>
<p><i>Age Group:</i> {{ consumersInfo.age }}</p>
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/403356.html
標籤:
上一篇:將經常更新的陣列保存到資料庫
