【问题标题】:Avoiding circular dependency with modal utility class?使用模态实用程序类避免循环依赖?
【发布时间】:2019-08-20 16:14:39
【问题描述】:

我有一个 utilities 类来处理整个应用程序中的常见事情,例如显示警报、加载微调器和模式。现在在我的主页上,我正在尝试调用utilities.openModal(),但我收到了带有以下警告消息的循环依赖:

[ng] 检测到循环依赖中的警告:

[ng] src/app/pages/users/add-entry/add-entry.page.ts -> src/app/services/utilities/utilities.service.ts -> src/app/pages/users/ add-entry/add-entry.page.ts

[ng] 检测到循环依赖中的警告:

[ng] src/app/services/utilities/utilities.service.ts -> src/app/pages/users/add-entry/add-entry.page.ts -> src/app/services/utilities/实用程序.service.ts

utilities.service.ts 上的 openModal 函数:

openModal(page, enterAnimation = null, leaveAnimation = null) {
  // Create modal
  this.modalCtrl.create({
    component: page,
    enterAnimation: enterAnimation,
    leaveAnimation: leaveAnimation,
    componentProps: {
      utilities: UtilitiesService
    }
  }).then(m => m.present());
}

openEntryModal() {
  this.openModal(AddEntryPage);
}

我只是在我的主页组件上用this.utilities.openEntryModal() 调用它,一旦模式打开它就会引发循环依赖警告。任何想法为什么会发生这种情况?我有一个粗略的想法,但无法确定。

add-entry.page.ts 导入:

import { Component } from '@angular/core';
import { UtilitiesService } from 'src/app/services/utilities/utilities.service';

utilities.service.ts 导入:

import { Injectable } from '@angular/core';
import { ModalController, LoadingController } from '@ionic/angular';
import { AnimationsService } from 'src/app/services/animations/animations.service';
import { AddEntryPage } from 'src/app/pages/users/add-entry/add-entry.page';

【问题讨论】:

  • 分享src/app/pages/users/add-entry/add-entry.page.tssrc/app/services/utilities/utilities.service.ts的导入部分
  • @RezaRahmati 添加。
  • @JoeScotto 您对此有何看法?我也有相同的用例,作为解决方法,我让请求者负责发送ComponentRef,这有效但感觉不对。

标签: angular typescript ionic-framework ionic4


【解决方案1】:

这意味着你在utilities.service.ts 中导入了AddEntryPage,在add-entry.page.ts 中你导入了UtilitiesService,这将导致循环依赖

根据您的代码,您似乎想从 AddEntryPage(您导入了服务)打开 AddEntryPage 组件的模式

如果您为其他功能导入服务,最好分解该服务,例如创建另一个名为modalService 的服务

【讨论】:

  • AddEntryPage 是在模态中打开的组件,而不是打开模态的组件。
  • 你想从它自己打开与模态相同的组件吗?
  • 我可能有点困惑,但基本流程是在我的主页上有一个按钮,它将打开添加条目模式。我不想从添加条目打开添加条目,我想要一个标题按钮,可以从应用程序内的任何位置打开添加条目,因此为什么我试图在单个实用程序类上获取它所以我可以导入它然后引用它。
  • @JoeScotto 那么导入UtilitiesServicein AddEntryPage 的原因是什么?
  • 我用它来关闭我的模态。 utilities.dismissModal() 以及在我的应用程序中使用的其他内容,例如加载微调器、警报等。这样我就不必在每个文件上创建和导入它们,因为整体实现总是相同的,只是文本是根据使用它的组件而有所不同。
猜你喜欢
  • 2011-06-14
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
相关资源
最近更新 更多