【发布时间】:2018-08-03 20:00:40
【问题描述】:
完整代码示例:https://stackblitz.com/edit/angular-iphgxf
如何从孙组件访问方法?我正在尝试使用服务来解决此问题,但鉴于以下情况,我不知道如何对其进行最后润色:
我正在尝试实现 CanDeactivateGuard 以防止用户在存在未保存数据时离开页面 (https://angular.io/guide/router#candeactivate-handling-unsaved-changes)。我在本指南中使用了相同的方法,其中我的页面组件中有一个 canDeactivate 方法,该方法由守卫的 canDeactivate 方法调用。
我的问题是我的 entity/:id 路由的组件是一个容器组件,而我保存表单数据的表示组件是路由组件的孙子组件。我需要访问 canDeactivate() 逻辑的实体详细信息组件中的表单。我需要我的路由组件的 canDeactivate 函数来访问实体详细信息组件上的另一个 canDeactivate 函数或访问表单数据以执行验证。
我正在为我的 entity/:id 路由(映射到 view-entity-page)使用与 @ngrx example-app(参见 book 模块)类似的架构,其中我有一个 view-entity-page 容器组件负责将路由器参数映射到@ngrx/store 中的“选择”实体操作。这个组件有一个子组件,selected-entity-page,它负责与@ngrx/store 一起将实体数据传递给实际的表示组件entity-detail。这可能有点矫枉过正,但这是我现在所拥有的......
【问题讨论】:
-
路由组件负责知道用户是否可以离开路由。我想您将不得不通过将它们注入父组件来委托给子组件。 (
@ViewChild(ComponentType) child: ComponentType)。替代方法是将“未更改”表单状态保留在服务中,该服务将在来自孙子的每个输入事件上调用,或者将其保持在您的应用程序状态(ngrx 存储)。