【问题标题】:angular2 Share data between pages with multi instancesangular2 在具有多个实例的页面之间共享数据
【发布时间】:2017-02-01 14:58:16
【问题描述】:

我正在使用 angular2 编写一个 Ionic 应用程序 - 让我们以 MasterDetail 模式为例:

MasterPage 是一个显示列表的组件。

DetailPage 是一个显示列表中单个项目的组件。

ListService 是一个保存单个列表数据的服务,该列表的数据要为MasterPageDetailPage 共享,因此应用于单个项目的所有更改(例如编辑)也会更新MasterPage

但是如果我有MasterPage多个实例 - 假设我有一个带有菜单项的MenuPage,我可以从中打开一个列表。

所以我的导航可能是这样的:

MenuPage -> MasterPage -> DetailPage -> MenuPage(来自标题上的菜单按钮)-> 第二个 MasterPage 显示不同的列表。

我如何拥有ListService 的多个实例,其中每组MasterPage - DeatilPage 共享一个实例?

【问题讨论】:

  • 我不明白 1 有什么问题。如果您有共享服务并从详细信息页面更新服务状态,那么母版页也会看到这些更改。
  • 是的,但是该服务如何同时保存多个实例(具有不同列表)的数据?
  • 只需在MasterPage 上提供服务,每个MasterPage DetailPage 对都会有自己的服务实例。
  • 我不知道 - 你可以把它写成答案 - 我会编辑这个问题以适合你的答案。

标签: angular ionic2


【解决方案1】:

如果您在@NgModule(...)AppModule 中提供服务,您将获得整个应用程序的单个实例。

如果您在@Component(...) 中提供服务,那么每个组件实例都会获得自己的服务实例并与其子级共享。

对于组件本身及其子组件,组件上的提供者覆盖AppModule 上的提供者和父组件上的提供者。

每个提供者总是有一个实例。如果将提供程序添加到组件中,则此提供程序的实例与组件的实例一样多。

【讨论】:

  • 但是我如何使 DetailPage 成为特定 MasterPage 的子组件(这样它就可以得到正确的服务实例),因为它们都是导航堆栈中的页面?
  • 你在用路由器吗?然后你需要把<router-outlet>放在MasterPage里面。
  • 我正在使用离子 NavController 我不认为有这样做的选项。 ionicframework.com/docs/v2/api/navigation/NavController
  • 抱歉,不知道 Ionic。但例如 @ViewChild('myNav') nav: NavController 和 `this.nav.push(Page1);` 看起来像 Page1 是当前组件的子组件。
猜你喜欢
  • 2017-10-01
  • 2017-10-19
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多