【发布时间】:2018-10-14 15:35:09
【问题描述】:
我定义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,尽管传入的数据并不总是true。 (我通过使用 Postman 调用服务来验证这一点......)
为什么值总是true?
我应该注意到todo.title 正确呈现。
更新
通过 Postman 调用 http://localhost:3000/todos 返回:
[
{
"id": 1,
"title": "Learn TypeScript",
"complete": "true",
"editMode": "false"
},
{
"id": 2,
"title": "Learn Angular changed",
"complete": "true",
"editMode": "false"
},
{
"id": 3,
"title": "Learn to Read",
"complete": "true",
"editMode": "false"
},
{
"id": 4,
"title": "Learn to Write",
"complete": "false",
"editMode": "false"
},
{
"title": "Learn how to type",
"complete": "true",
"editMode": "false",
"id": 5
},
{
"title": "Learn how to drive",
"complete": "false",
"editMode": "false",
"id": 6
}
]
【问题讨论】:
-
您能否通过从组件本身订阅服务来检查 isComplete 的值 this.todoDataService.getAllTodos().subscribe((response)=>{ console.log(response)});
-
你试过*ngIf="todo.complete == true"
-
@Marshal -- 嗯,这样做会导致他们都评估
false。 -
@NickHodges 虽然我的评论很接近,但我只是假设该值是布尔值而不是字符串。
-
@Marshal -- 感谢您的帮助。
标签: angular typescript angular-ng-if