从另一个组件调用一个组件中的函数

Posted

技术标签:

【中文标题】从另一个组件调用一个组件中的函数【英文标题】:call a function in a component from another component 【发布时间】:2017-07-13 07:15:02 【问题描述】:

在 Angular2 中,假设我有 component1(将其用作左侧面板导航器)和 component2 。这两个组件彼此不相关(兄弟姐妹、父母和孩子,...)。 如何从component2调用component1中的函数? 我不能在这里使用事件绑定。

【问题讨论】:

您可能会使用service 来管理该连接。 使用通量模式——服务是事件的分发者,组件是订阅者。组件并不真正了解彼此。这可能有用:***.com/questions/42219858/… @ryannjohnson 在 component1 中,我有插值 total 需要更新并立即显示在左侧面板中。如果我只是调用 service ,我该如何更新这个变量? @pixelbits 我去看看能不能用? @SarahN Checkout @seidme 的回答如下。将服务注入组件后,您可以直接在模板中引用其属性,即 myservice.total 【参考方案1】:

共享服务是非相关组件之间的常用通信方式。 您的组件需要use a single instance of the service,因此请确保它在根级别提供。

共享服务:

@Injectable()
export class SharedService 

    componentOneFn: Function;

    constructor()  

组件一:

export class ComponentOne 

    name: string = 'Component one';

    constructor(private sharedService: SharedService) 
        this.sharedService.componentOneFn = this.sayHello;
    

    sayHello(callerName: string): void 
        console.log(`Hello from $this.name. $callerName just called me!`);
    

组件二:

export class ComponentTwo 

    name: string = 'Component two';

    constructor(private sharedService: SharedService) 
        if(this.sharedService.componentOneFn) 
            this.sharedService.componentOneFn(this.name); 
            // => Hello from Component one. Component two just called me!
        
    

这篇文章也可能有帮助:Angular 2 Interaction between components using a service

【讨论】:

这在 2017 年 10 月 24 日仍然有效吗?完全按照指定进行了尝试,但是从 comp2 调用时 comp1 的名称似乎未定义。【参考方案2】:

您可以使用 Angular BehaviorSubject 与不相关的组件进行通信。

服务文件

import  Injectable  from '@angular/core';
import  BehaviorSubject  from 'rxjs/BehaviorSubject';


@Injectable()
export class commonService 
    private data = new BehaviorSubject('');
    currentData = this.data.asObservable()

    constructor()  

    updateMessage(item: any) 
        this.data.next(item);
    


第一个组件

constructor(private _data: commonService)  
shareData() 
      this._data.updateMessage('pass this data');
 

第二部分

constructor(private _data: commonService)  
ngOnInit() 
     this._data.currentData.subscribe(currentData => this.invokeMyMethode())

使用上述方法,您可以轻松调用方法/与不相关的组件共享数据。

More info here

【讨论】:

以上是关于从另一个组件调用一个组件中的函数的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Angular 6 - 从另一个组件调用模态窗口组件

如何在 flex-edited 中从另一个 mxml 组件调用 mxml 组件

从另一个组件vue js和laravel调用方法

ReactJS - 从另一个组件调用一个组件方法