1

我有角4的框架組件,看起來像這樣Angular4,無法掩蓋內容

import { ListService } from '../list/list.service'; 
import { Component, OnInit } from '@angular/core'; 
import { ActivatedRoute } from '@angular/router'; 

@Component({ 
    selector: 'view', 
    template: ` 
    <div *ngIf="row?.id"> 
    <div> 
     <p>{{row.id}}</p> 
     <p>{{row.name}}</p> 
     <p>{{row.weight}}</p> 
     <p>{{row.symbol}}</p> 
    </div> 
    </div> 
    <div *ngIf="!row">test</div> 
    <router-outlet></router-outlet> 
    `, 
    styles: [] 
}) 
export class ViewComponent implements OnInit { 

    constructor(private route: ActivatedRoute, 
    private service: ListService) { 
    this.route.params.subscribe(params => { 
     const id = parseInt(params['id']); 
     if (id) { 
     this.row = this.service.getRow(id); 
     console.log(this); 
     } 
    }); 
    } 

    row; 

    ngOnInit() { } 
    showInfo(){ 
     console.log(this) 
    } 
} 

而第一*ngIf="row?.id"作品就好了,第二個行爲古怪的意義總是true,我做了什麼了嗎?

編輯:

當我測試它似乎ViewComponent不能正確更新,這意味着當我執行console.logconstructor > after if condition Viewcomponent有3個屬性routeservicerow但是當我創建功能

showInfo(){ 
    console.log(this) 
} 

現在this - >ViewComponent只有2個屬性routeservice

這可能是一些問題與範圍?

+4

當你希望它是假的呢? –

+0

我預計當沒有人點擊任何一行時它將會是假的 – Viszman

回答

0

您應使用以下

<div *ngIf="row === undefined">test</div> 

*ngIf="!row"正在檢查row === false

+1

'!row'不等於'row === false',而是'row == false' – Pac0

0

*ngIf="!row"檢查該行是falsy值(意爲row == false,而這又可能意味着,如果行是一個對象,那行是nullundefined)。

只要你的行是非空或未定義,這種情況將是真實的,'測試'將出現。

如果你想你的第一個*ngIf相反檢查,只是否定它完全:

<div *ngIf="!(row?.id)">test</div> 

(括號只是爲了清楚起見)