У меня есть коллекция на монго со многими такими документами:
{
name: "someUniversityName",
campus: ["someCity", "anotherCity", "anotherCity2"]
}
Я хотел сделать запрос GET и получить их. Это сделано и правильно отображается в моем терминале с 201 res.status. Как вы можете видеть в приведенном ниже коде, я сделал это с subscribe, который использует doIt() от helper.service.ts.
Что я не могу сделать, так это: присваивает переменной в name только свойство universities.component.html из моих университетов выборки. ТАК ТОГДА Я могу присвоить эти значения:
<select
name = "universidad"
class = "form-control"
id = "univer"
(click) = "doIt()">
<option
*ngFor = "let univ of univs">
{{ univ }} <-- DISPLAY THEM HERE -->
</option>
</select>
ОБНОВЛЕНИЕ 1
Я console.info this.universidad из файла html, а свойства name и sede - это undefined, что означает, что назначение, которое должно быть выполнено в .subscribe для this.universidad, не завершено ????????
Мой код
University.component.ts
import { Component, OnInit } from '@angular/core';
import { HttpClient } from "@angular/common/http";
import { map } from '../../../../../../../node_modules/rxjs/operators';
import { HelperService, universidad } from "../../../../../services/helper.service";
import { Observable } from '../../../../../../../node_modules/rxjs';
@Component({
selector: 'app-usuarios',
templateUrl: './usuarios.component.html',
styleUrls: ['./usuarios.component.scss']
})
export class UsuariosComponent implements OnInit {
universidad: Object = {
name: String,
sede: [String]
}
universidadModel: String
constructor(
private http: HttpClient,
private helperService: HelperService
) { }
doIt(){
this.helperService.getListado()
//clone the data object, using its known config
.subscribe((data: universidad) => this.universidad = {
name: data['name'],
sede: data['sede']
});
}
ngOnInit() {
}
}
helperService.ts
import { Injectable } from '@angular/core';
import { AuthService } from "./auth.service";
import { Router } from '@angular/router';
import { BehaviorSubject } from "rxjs/internal/BehaviorSubject";
import { HttpClient } from "@angular/common/http";
export interface universidad {
name: String;
sede: [String]
}
@Injectable({
providedIn: 'root'
})
export class HelperService {
private toggleTrigger = new BehaviorSubject<boolean>(false);
toggle = this.toggleTrigger.asObservable();
constructor(
private authService: AuthService,
private router: Router,
private http: HttpClient
) { }
listadoUrl: string = 'http://localhost:3000/universidads/listado';
getListado() {
// now returns an observable of universidad
return this.http.get<universidad>(this.listadoUrl);
}
}
просмотр HTML
<div class = "row">
<div class = "col-6">
<form>
<div class = "form-group">
<label for = "universidad">University list</label>
<select
name = "universidad"
class = "form-control"
id = "univer"
(click) = "doIt()"
>
<option
*ngFor = "let univ of universidad | async"
>
{{ univ }}
</option>
</select>
</div>
</form>
</div>
</div>
<div class = "row">
<div class = "col-xs-12">
<h1 class = "display-1 mt-4">{{univer}}</h1>
</div>
</div>
С Уважением.
Твой вопрос непонятный, с НАЗНАЧЕНИЕ ИХ ЗДЕСЬ ты имеешь ввиду: отображать их здесь? Вы создаете universidad как объект, вы не можете перебирать объекты, переменная, созданная в subscribtion, должна быть Массивом Объектов, каждый объект которого похож на одну опцию.
Не знаю, что в data. Я попытался поместить console.info где-нибудь внутри this.helperService.getListado(), и он везде жалуется.
Вы связываете *ngFor = "let univ of univs", где univs в компоненте?
попробуйте войти в консоль внутри подписки. Вы должны получить это там!
Арагорн просто опечатка в посте, не исправил.
alokstar возвращает объект data с массивом моих университетов и всей информацией внутри них.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Решил это. Я написал это внутри ngOnInit, поэтому он вызывает инициализацию. Мне просто нужно было перебрать объекты из массива объектов, которые мне вернул запрос. universidadListado - это просто массив, который получает имена, поэтому я могу просмотреть их в цикле с помощью *ngFor.
this.http.get('http://localhost:3000/universidads/listado')
.subscribe(res => {
for(let key in res){
this.universidadListado.push(res[key].name)
}
})
Теперь мой select отображает все названия университетов как options динамически.
Спасибо за вашу помощь, С Уважением.
какова структура данных (ответа), когда вы получаете их в подписке, и какую ошибку вы видите?