2016-08-24 109 views
1

我已經爲模式創建了角2組件,並且此組件擴展了一個基本模式類,該類包含指示模式是否打開的布爾屬性。然後,我需要在模板的* ngIf中使用此屬性來顯示/隱藏模式。Angular 2在擴展類中使用屬​​性ngIf不起作用

的問題是,我收到以下錯誤,當我打電話給我開的方法:

Expression has changed after it was checked. Previous value: 'true'. Current value: 'false' 

我的模態分量:

@Component({ 
    selector: 'cmg-modal-create', 
    template: require('./modal.create.html') 
}) 
export class ModalCreateComponent extends Modal { 
    constructor() { 
    super(); 
    } 
} 

我的組件模板:

​​

模架等級:

export class Modal { 
    protected isModalOpen: boolean = false; 

    protected open(): void { 
    this.isModalOpen = true; 
    } 

    protected close(): void { 
    this.isModalOpen = false; 
    } 
} 

最後一個頂級組件內我所說的情態動詞open方法

頂級組件:

@Component({ 
    directives: [ ModalCreateComponent ], 
    selector: 'cmg-project-card', 
    template: require('./project-card.html') 
}) 
export class ProjectCardComponent { 
    @ViewChild('createModal') createModal: any; 

    private openModal(): void { 
    this.createModal.open(); 
    } 
} 

頂級組件模板:

<cmg-modal-create #createModal></cmg-modal-create> 
+0

「ProjectCardComponent.openModal()」在哪裏調用? – hendrix

回答

2

此錯誤消息意味着,假設你沒有打角本身就是一個錯誤,那東西簡稱爲,用於檢索渲染到視圖的數據正在更改該值。要正確地修復它,你需要找到它,並改變它以消除其副作用。

1

導入以下:

import { ChangeDetectorRef } from '@angular/core';

然後加入ChangeDetectorRef到你的構造和使用方法detectChanges()改變布爾值的時候,是這樣的:

this.changeDetectionRef.detectChanges();

+0

我會在哪裏包括這個?我嘗試在open()調用之後直接調用createModal.open()方法的組件中添加。這從我的控制檯清除了錯誤,但模式組件未檢測到更改。我也嘗試將它添加到我的Modal類中,但導致應用程序無法調用未定義的.detectChanges的錯誤。 – efarley

+0

嘗試在open()調用之前添加它。 –

+0

不,這只是回到原來的錯誤消息。 – efarley