2016-08-24 110 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