加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么* 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>&#10003;</span></span>
  <ng-template #elseBlock>
    <span>&#x2715;</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>&#10003;</span></span>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读