为什么* ngIF在我的Angular应用程序中总是评估为true?
发布时间:2020-12-17 07:07:14 所属栏目:安全 来源:网络整理
导读:我将Todo定义如下: export class Todo { id: number; title: string; complete: boolean = false; editMode: boolean = false; } 我有以下数据服务: getAllTodos(): ObservableArrayTodo { return this.aHttpService.getArrayTodo('http://localhost:3000/
我将Todo定义如下:
export class Todo { id: number; title: string; complete: boolean = false; editMode: boolean = false; } 我有以下数据服务: getAllTodos(): Observable<Array<Todo>> { return this.aHttpService.get<Array<Todo>>('http://localhost:3000/todos'); } 然后,我有这个组件: import { Component,OnInit } from '@angular/core'; import { TodoDataService } from '../todo-data.service'; import { Todo } from '../todo'; import { Observable } from 'rxjs/Observable'; @Component({ selector: 'app-all-tasks',templateUrl: './all-tasks.component.html',styleUrls: ['./all-tasks.component.css'] }) export class AllTasksComponent implements OnInit { constructor(private todoDataService: TodoDataService) {} allTodos: Observable<Array<Todo>>; ngOnInit() { this.allTodos = this.todoDataService.getAllTodos(); } } 在模板中我有: <li *ngFor="let todo of allTodos | async" > <span *ngIf="todo.complete; else elseBlock"><span>✓</span></span> <ng-template #elseBlock> <span>✕</span> </ng-template> <span>{{todo.title}}</span> </li> 但是,尽管传入的数据并非总是如此,但todo.complete总是计算为true. (我通过Postman调用服务验证…) 为什么价值总是如此? 我应该注意todo.title正确呈现. 更新 通过Postman调用http:// localhost:3000 / todos返回: [ { "id": 1,"title": "Learn TypeScript","complete": "true","editMode": "false" },{ "id": 2,"title": "Learn Angular changed",{ "id": 3,"title": "Learn to Read",{ "id": 4,"title": "Learn to Write","complete": "false",{ "title": "Learn how to type","editMode": "false","id": 5 },{ "title": "Learn how to drive","id": 6 } ] 解决方法
我确信完成是作为字符串而不是布尔值.
由于* ngIf中的字符串(通常在JavaScript if(…)中)总是解析为true(只要它不为空(”)),* ngIf块总是显示在屏幕上,而elseBlock是不. 用它来修复它: <span *ngIf="todo.complete === 'true'; else elseBlock"><span>✓</span></span> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |