如何从 Angular 6 中的父组件访问子组件中的表单?

Posted

技术标签:

【中文标题】如何从 Angular 6 中的父组件访问子组件中的表单?【英文标题】:How to access form in child component from parent component in angular 6? 【发布时间】:2019-06-26 03:12:37 【问题描述】:

我的问题是我的父组件有一个父组件和许多子组件。父组件没有任何表单,子组件有表单。所有子组件共享父组件和子组件的相同路由'没有任何路由器链接来唯一标识。所以任务是在表单脏并且用户正在离开该页面时显示弹出窗口。所以我实现了可以停用保护。所以在“app.module.ts”中如何我可以给子组件can-deactivate(bcz子组件没有任何路由器路径)。 我怎样才能做到这一点?

有人可以帮我解决这个问题吗?过去两天一直在挣扎:( 任何其他解决方案也可以 非常感谢提前

can-deactivate-guard.ts:

import ComponentCanDeactivate from './component-can-deactivate';

@Injectable()
export class CanDeactivateGuard implements CanDeactivate<ComponentCanDeactivate> 
  canDeactivate(component: ComponentCanDeactivate): boolean 

    if(!component.canDeactivate())
        if (confirm("You have unsaved changes! If you leave, your changes will be lost.")) 
            return true;
         else 
            return false;
        
    
    return true;
  

component-can-deactivate.ts:

export abstract class ComponentCanDeactivate 
 abstract  canDeactivate(): boolean;
@HostListener('window:beforeunload', ['$event'])
    unloadNotification($event: any) 
        if (!this.canDeactivate()) 
            $event.returnValue =true;
        
    

form-can-deactivate.ts:

export abstract class FormCanDeactivate extends ComponentCanDeactivate

 abstract get form():NgForm;

 canDeactivate():boolean
      return this.form.submitted || !this.form.dirty
  

parent component.html:ParentComponent.html 中没有表单

<child1>some actions</child1>
<child2>some actions</child2>

等等 child1.component.html:

<form #form="ngForm">some fields</form>

app-routing.module.ts:

routes=path:':parent/somepath',component:ParentComponent,canDeactivate:[CanDeactivateGuard]

【问题讨论】:

如果您添加一些代码示例。帮助您将非常容易。 StackBliz 上的示例 好的,我可以给你示例代码 您可以编辑您的帖子以获得最佳视图。不要尝试在 cmets 中编写代码 【参考方案1】:

如果您在容器内加载不同的component 而不更改网址,并且您需要在导航之前检查表单状态是否,因此您可以在@987654322 上获得此信息@。一旦您离开活动组件,此事件就会触发。

如果你需要处理浏览器事件,比如返回/刷新/关闭按钮,你需要添加@HostListener装饰器

【讨论】:

以上是关于如何从 Angular 6 中的父组件访问子组件中的表单?的主要内容,如果未能解决你的问题,请参考以下文章

如何从Angular2中的父组件获取子路由的:id参数

数据未从Angular中的父组件传递到子组件

如何从 TypeScript 文件中的父级获取子组件变量和函数

Angular 5. 检查子组件中的父 *ngIf

Angular 6 Change detection - 如何设置子组件?

如何在 Angular 中显示具有自己路由的父组件内的特定子组件?