angular - 无法读取未定义的属性(读取“_id”)
问题描述
我是 Angular 的新手,正在尝试做一个小项目。任何人都可以帮助我,为什么我会收到这个错误?我已经尝试过了,*ngIf
但它不起作用。这是我的组件。
ticketForm: FormGroup;
modalOptions:NgbModalOptions;
tickets:any = [];
allUsers: User[];
newTickets: Ticket[];
constructor(
private ticketService: TicketService,
private modalService: NgbModal,
private ngbDateParserFormatter: NgbDateParserFormatter,
private authService: AuthService,
private formBuilder: FormBuilder
){
this.modalOptions = {
backdrop:'static',
backdropClass:'customBackdrop'
}
this.readticket();
this.readUser();
}
ngOnInit() {
this.readUser();
this.ticketForm = this.formBuilder.group({
name: [''],
status: [''],
assignedTo: [''],
place: [''],
dueDate: ['']
});
}
get f() { return this.ticketForm.controls; }
createTicket() {
this.ticketService.createticket(
{
name: this.f.name.value,
status: this.f.status.value,
assignedTo: this.f.assignedTo.value,
place: this.f.place.value,
dueDate: this.ngbDateParserFormatter.format(this.f.dueDate.value)
}
)
.subscribe(success => {
if (success) {
let ticketTmp: Ticket = success
this.tickets.push(ticketTmp)
}
});
}
readticket(){
this.ticketService.gettickets().subscribe((data) => {
this.tickets = data;
})
this.sortTickets();
}
readUser() {
this.authService.getUsers().subscribe((data) => {
this.allUsers = data
// -
})
}
removeticket(id: any) {
this.ticketService.deleteticket(id).subscribe((data) => {
for(let i = 0; i < this.tickets.length; ++i){
if (this.tickets[i]._id === id) {
this.tickets.splice(i,1);
}
}
})
}
open(content) {
console.log("USERS: ", this.allUsers)
this.readUser();
this.modalService.open(content, {ariaLabelledBy: 'modal-basic-title'}).result.then((result) => {
this.createTicket()
});
}
sortTickets() {
this.getNewTickets();
}
getNewTickets() {
for(let i = 0; i < this.tickets.length; i++) {
if(this.tickets[i].status === "new") {
let ticketTmp = new Ticket(this.tickets[i]._id,this.tickets[i].place, this.tickets[i].status, this.tickets[i].assignedTo, this.tickets[i].date)
this.newTickets.push(ticketTmp)
}
}
}
这是我在 HTML 中的模态
<ng-template #content let-modal>
<div class="modal-header">
<h4 class="modal-title" id="modal-basic-title">Ticket Erstellen</h4>
<button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form [formGroup]="ticketForm" (ngSubmit)="getInput()">
<label for="dateOfBirth">Gebäude</label>
<div class="row">
<div class="col-md-10">
<div class="form-group">
<input type="text" class="form-control" formControlName="place" name="place" placeholder="z.B Gärtnerweg 46">
</div>
</div>
</div>
<label for="dateOfBirth">Ticket Name</label>
<div class="row">
<div class="col-md-10">
<div class="form-group">
<input type="text" class="form-control" formControlName="name" name="name" placeholder="z.B Heizung defekt">
</div>
</div>
</div>
<label for="dateOfBirth">Status</label>
<div class="row">
<div class="col-md-10">
<div class="form-group">
<select class="form-control form-select" aria-label="Default select example" name="status" formControlName="status">
<option value="new">Neu</option>
<option value="doing">Doing</option>
<option value="done">Done</option>
</select>
</div>
</div>
</div>
<label for="dateOfBirth">Bearbeiter</label>
<div class="row">
<div class="col-md-10">
<div class="form-group">
<select class="form-control form-select" aria-label="Default select example" name="assignedTo" formControlName="assignedTo">
<div *ngIf="allUsers">
<option *ngFor="user of allUsers" [attr._id]="user._id" >{{user.name}}</option>
</div>
</select>
</div>
</div>
</div>
<label for="dateOfBirth">Eingangsdatum</label>
<div class="col-md-10">
<div class="form-group">
<div class="input-group input-group-alternative">
<div class="input-group-prepend">
<span class="input-group-text"><i class="ni ni-calendar-grid-58"></i></span>
</div>
<input class="form-control datepicker" placeholder="Datum auswählen" name="dp" formControlName="dueDate" ngbDatepicker #d="ngbDatepicker" (click)="d.toggle()" type="text"/>
</div>
</div>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-dark" (click)="modal.close('save')">Save</button>
</div>
</ng-template>
和我的服务
//getAll User
getUsers(): Observable<User[]> {
return this.http.get<User[]>(`${this.baseUri}/getUsers`)
.pipe(map(response=> {
if(response){
return Object.values(response); //This will return the array of object values.
}
return []; // If response is null return empty array for safety.
}));
}
解决方案
找到了。
你的语法是错误的,你应该这样做 *ngFor 像这样:
*ngFor="let user of allUsers"
(你忘了在let
后面加上*ngFor=
)
推荐阅读
- amazon-web-services - 尝试查找 AWS WAF 区域的 ARN 模式
- c - While循环的行为不同,而条件相同?
- json - 将 JSON 数组扩展为具有 NULL 的文本值
- php - 调用php文件后如何响应?
- html - 如何在将指针移开时使用 CSS 使文本单独消失
- r - 将 ggplot 图形导出为 pdf 时出错:字体类型无效
- java - 如何使用字符串变量
- python - 如何让 Google Assistant 使用 Python 脚本从网络获取数据
- scala - 如何在火花中读取工作任务中累加器的值?
- c# - Remove similar Rectangles from a list