在父组件中显示来自子组件的按钮的结果 - Angular

Posted

技术标签:

【中文标题】在父组件中显示来自子组件的按钮的结果 - Angular【英文标题】:Display the result of a button from chlid component in parent component - Angular 【发布时间】:2021-07-13 11:44:04 【问题描述】:

我在 chlid 组件中有一个按钮,它有一个表单,单击该按钮时,它会添加到 DB 中并发出警报。我想在显示数据库中数据列表的父组件屏幕中显示警报。

html

<button class="pt-primary adconfig-button" *ngIf="!isEditMode" [disabled]="!testSuccessful" (click)="storeNewConnection()">Add Configuration</button> 

TS:

        this.adService.addAdConfiguration(this.adConfigurationObj, this.isEditMode).subscribe((response) => 
            const msg: string = response.Status === ResultStatus.Success ? this.alerts.push(
                
                    msg: 'Configuration added successfully!',
                    type: 'success',
                    timeout: 3000
                ) : response.Details;
        );
    

        this.router.navigate(['/configuration/groups-permissions'],  state:  isAdConfig: true  );

我想路由到这个路径(父组件)并在那里显示警报。

如何实现?

【问题讨论】:

【参考方案1】:

    路由必须在订阅回调块内,以确保在异步调用this.adService.addAdConfiguration()响应后执行。

    有多种方法可以使用 Angular 路由器传递数据。下面展示了如何利用可选参数。

发送方组件

this.adService.addAdConfiguration(this.adConfigurationObj, this.isEditMode).subscribe((response) => 
  const msg: string = response.Status === ResultStatus.Success 
    ? this.alerts.push(
        msg: 'Configuration added successfully!',
        type: 'success',
        timeout: 3000
      ) 
    : response.Details;

    this.router.navigate(
      [
        '/configuration/groups-permissions',
         message: JSON.stringify(msg) 
      ], 
       state:  isAdConfig: true  
    );
);

收件人组件

import  ActivatedRoute  from '@angular/router';

export class SomeComponent implements OnInit 
  message: any;

  constructor(private _actRoute: ActivatedRoute)  

  ngOnInit() 
    this.message = JSON.parse(this._actRoute.snapshot.paramMap.get(message));
  

编辑:错字ActivateRoute -> ActivatedRoute

【讨论】:

这里的_actRoute是什么? 参数属性private _actRoute: ActivatedRoute。原帖有错别字。它说ActivateRoute 而不是ActivatedRoute。我已经修改了答案。 也可以简单地称它为activatedRoute,前缀/缩写纯粹是一种自以为是的方式来显示来自构造函数的值。总体思路是将消息作为参数应用到 URL 上,然后在父级上解析来自 URL 的消息以显示它。

以上是关于在父组件中显示来自子组件的按钮的结果 - Angular的主要内容,如果未能解决你的问题,请参考以下文章

通过子组件在父组件中反应切换视图功能

在父按钮单击时调用并执行多个子函数

在父组件的 onClick 上一次又一次地添加子组件,每次使用新的道具到子组件

React Native - 处理来自子组件(自定义组件)的父状态,而不在父组件中添加功能

VueJS:在子组件中触发事件时在父组件中运行函数

在父组件中单击按钮时从子组件执行功能:Angular2