微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Angular 5-Angular服务不在Modal中显示数据

如何解决Angular 5-Angular服务不在Modal中显示数据

我正在使用组件和服务在我的应用程序中使用模式。 在download.compoment.ts中,有一种方法可以打开模式窗口。

download.component.ts

constructor(private modalService: ModalService) {}

public openModalProperty(id: string,nameFile: string) {
    this.properties = [];
    this.propertyService.byFile(+id).subscribe(
        data => {
            this.properties = data;
            if (this.properties && this.properties.length > 0) {
                this.titleFile = nameFile;
                this.openModal("modal-download");
            } else {
                this.showErrorProperties(this.titleFile);
            }
        },_ => {
            this.processError();
        }
    );
}

public openModal(id: string) {
    this.modalService.open(id);
}

propertiesobject的数组,其数据显示在模式窗口中。 模板如下:

download.component.html

<app-modal id="modal-download" [title]="titleFile">
    <div class="container" *ngFor="let property of properties">
        <label>{{ property.name }}: &nbsp; </label><label> {{ property.value }} 
        </label>
    </div>
</app-modal>

localhost中它可以正常工作,我单击button显示modal和相应的数据,但是当我将其上传到生产环境时,模态窗口打开,但是仅当我按下键盘上的任意键或单击鼠标时,才会显示属性安排的信息。

会发生什么?

谢谢。

解决方法

为确保检测不是问题,请在构造函数中将cdr作为ChangeDetectionRef添加为组件中的依赖项,然后在setTimeout(() => this.cdr.detectChanges())之后添加this.modalService.open(id);

出于教育原因,我将尝试解释。

您触发模态服务并打开模态。

模态正在打开,但是它没有用值触发更改检测,因为在创建模态实例之前更改了值。

这就是在单击鼠标左键或右键后一切正常的原因。这是因为您通过单击鼠标来触发组件检查检测,并且触发的组件对所有子组件进行检测。

我在这里发表评论,因为这似乎是正确的答案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。