【问题标题】:How to pass data from a form(input) to another component through service in angular如何通过角度服务将数据从表单(输入)传递到另一个组件
【发布时间】:2019-11-13 06:49:54
【问题描述】:

我有 2 个组件,想要获取一种形式的输入并将它们作为数据传递给另一个组件。

组件 1:

this.dal = this.form_search.get('dal').value;
this.service.passDataR(this.dal);

服务:

public S = new Subject<any>();
passData$ = this.S.asObservable();

组件 2:

this.service.passDataR$
   .subscribe(
     result => {

        console.log('data 1 lista here', result);

      }
   );

这应该通过服务来完成,因为这些组件没有任何关系。

问题是,当我将服务表单 comp1 调用为 comp3 时,它就可以了。 但是当从 comp3 调用 comp1 数据时是未定义的。所以我无法看到第一个 comp 的输入结果。

【问题讨论】:

    标签: angular service components


    【解决方案1】:

    根据您的代码,订阅者组件 (comp3) 应该在您从 comp1 发布时准备就绪。如果您现在不订阅,则发出的值将丢失。

    改为使用 BehaviorSubject(),它总是向其订阅者发出最后发布的值。在您的代码中只需更改 -

    public passSource = new BehaviorSubject<any>(**initialValue**);
    

    【讨论】:

    • 我应该在初始值传递什么值?我想从 comp1 (this.dalreparto) 传递表单的值
    • 如果 string - ' ' 或 boolean = true/false,则可以传递 this.dalreparto 的默认值类型。你也可以传递 undefined 或 null。
    【解决方案2】:

    您是否尝试过使用 BehaviourSubject 代替?这样,你可以设置一个初始值

    public passRepartiSource = new BehaviorSubject(/*value*/); 
    

    【讨论】:

    • 我应该传递什么值?我想从 comp1 (this.dalreparto) 传递表单的值
    • 这真的取决于 this.form_search.get('dalreparto').value 的返回类型
    猜你喜欢
    • 2021-08-31
    • 2020-01-25
    • 2019-10-10
    • 2022-11-22
    • 2018-07-08
    • 2020-01-09
    • 2021-02-02
    • 2019-08-03
    相关资源
    最近更新 更多