Angular2 - 从另一个独立组件调用函数。基本上,从外部组件调用函数

Posted

技术标签:

【中文标题】Angular2 - 从另一个独立组件调用函数。基本上,从外部组件调用函数【英文标题】:Angular2 - call a function from another standalone component. Basically, call function from outside component 【发布时间】:2021-07-25 21:05:14 【问题描述】:

我正在一个组件(Component1)中加载另一个包含表单的独立组件(Component2)。

假设你做了一个表单组件,我想将它集成到我的组件中,并触发你编写的提交功能,而不需要点击你的提交按钮。

此表单上的提交按钮触发保存数据的功能:

submitData(newUserForm: NgForm)

主组件(Component1)也有一个提交按钮。我想要的是从 Component2 中删除提交按钮,并在我单击 Component1 中的提交时触发提交功能。

类似:

<button type="button" class="submit" (click)="saveData()"> Save </button>

saveData() 
     Component2.submitData(data);

ViewChild 不起作用,因为这 2 个组件不是同一个组件的一部分。此外,输出将不起作用。

我必须从 Component2 外部调用该函数的哪些选项?

希望你能帮忙。

谢谢。

问候, AG

【问题讨论】:

您可以使用可以在两个组件中注入的服务或 redux -> ngrx 来实现此目的 【参考方案1】:

没有太多上下文,我认为您需要一项服务来执行此操作。如果这两个组件之间没有关系,为什么要从组件 2 调用函数? 将保存逻辑放入服务中,并将其注入到您需要的任何组件中。

【讨论】:

【参考方案2】:

在此处使用服务

SomeService

private value: Subject<string> = new Subject<string>();

// return the Subject as an Observable in order to be able to subscribe to it
public get theValue(): Observable<string> 
    return this.value.asObservable();


// set the current value
public set theValue(value: string) 
    this.value.next(value);

组件 2 TS

constructor(private someService: SomeService)



ngOnInit(): void 
    // subscribe to the value and refresh the local variable whenever it changes
    this.someService.theValue.subscribe( value => 
        console.log('Info from Component 1: ' + value;

        if (value === 'Saved') 
            Component2.submitData(data);
        
    );

组件 1 TS

constructor(private someService: SomeService)


saveData(): void 
    this.someService.theValue = 'Saved';

【讨论】:

【参考方案3】:

这是关于组件交互的,你需要使用服务来在两个不同的组件之间进行通信。主要是Angular的依赖注入。

只需使用主题即可。

【讨论】:

以上是关于Angular2 - 从另一个独立组件调用函数。基本上,从外部组件调用函数的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个组件重新渲染特定组件模板?角 2

Angular2从另一个类访问函数/变量

Angular2从另一个组件访问变量

如何在角度 2 中调用另一个组件方法

将Angular2服务注入组件基类

React:从另一个组件调用函数(具体示例)