【问题标题】:Angular - resolver and component not sharing injected service?Angular - 解析器和组件不共享注入服务?
【发布时间】:2017-11-30 16:31:48
【问题描述】:

我有一个表格来显示我的产品列表组件中的一些产品。数据量适中,所以我添加了一个解析器,以便在加载数据之前不让用户登陆页面。现在,我的解析器注入了我的产品服务,它有自己的方法来从我的后端加载数据并将产品保存在服务内部的数组中。所以我的解析器注入这个服务,调用加载产品函数来预取数据,然后加载组件。

现在的问题是,重用产品列表组件中数据的最佳方式是什么?出于某种原因,如果我将相同的服务注入到产品列表组件中,我可以看到产品没有加载,所以我不确定我的解析器和组件是否注入了我的服务的同一个单例。

如果我只是使用解析器来传递它从服务本身获得的产品,那么我的组件可以访问这些产品,但在对它们进行更新时,它不会将更改写入我的产品列表服务,这是其他组件在其他地方所需要的。

这种设置的最佳结构/方法是什么。我确定它不会那么罕见?

【问题讨论】:

  • 你是在你的模块提供者中提供你的服务吗?
  • 是的,它在我的产品列表模块和加载我的解析器的模块(应用程序模块)中都提供了
  • 在这种情况下,您应该创建一个将由两个模块(产品列表和应用程序)导入的 shareModule。这样只会创建一个服务实例,而现在正在创建两个实例
  • 谢谢,让我试一试,然后回复你。
  • 感谢您的帮助。它现在似乎正在工作。只是现在什么是好的做法的问题。由于我的解析器的唯一目的是运行我的服务中的方法,它不需要将这些方法返回给组件,因为它也注入了服务。那么这是一个好习惯吗?我不应该从解析器返回任何东西吗?

标签: javascript angular dependency-injection


【解决方案1】:

如果您查看 Angular 文档,则说明如下“不要在 共享模块中指定应用程序范围的单例提供程序。导入该共享模块的延迟加载 NgModule 会生成自己的副本服务..”

因此,您希望作为单例的服务应该在核心模块中提供,您在应用启动时导入一次,并且永远不要在其他任何地方导入。

这是detailed explanation of the Core module.的链接

祝你有美好的一天:)

【讨论】:

  • 感谢您的支持文档。现在似乎运行良好,并且我对模块有了更好的了解。
猜你喜欢
  • 1970-01-01
  • 2019-03-29
  • 2019-05-03
  • 2017-01-04
  • 2017-04-15
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 2017-10-16
相关资源
最近更新 更多