在 Angular 中,当组件不是父/子时,如何将值从一个组件传递到另一个组件?

Posted

技术标签:

【中文标题】在 Angular 中,当组件不是父/子时,如何将值从一个组件传递到另一个组件?【英文标题】:In Angular, how to pass value from one component to another when the components are not parent/child? 【发布时间】:2020-05-22 21:59:26 【问题描述】:

我是 Angular2+ 的新手,阅读了很多资料,包括 Angular 网站。

从角度来看,对于父/子,我们可以使用@Input() https://angular.io/guide/template-syntax#input-and-output-properties

但在我的代码中,我有两个不同的模块,每个模块都有一个组件。

如何将Module1的component1中的object值传递给Module2的component2?

我尝试过使用@Input() 但没有成功,并且从上面的Argular 链接@Input() 指的是父/子,这不是我的情况,好吧,据我了解不是:)

我可以通过路由、字符串和数字值发送,但不能通过对象发送,这就是我需要不同方法的原因。

感谢任何cmets 阿德米尔

【问题讨论】:

你可能:需要重构你的 Angular 模块以保持清晰的组件树或者使用像 Redux 这样的状态管理器 谢谢 Guido,我创建了模块以避免所有组件都位于 SRC 文件夹下。无论如何,我会看看如何更好地解决这个问题。 【参考方案1】:

如 cmets 中所述,您可以使用功能齐全的状态管理器,例如 Redux。

但是,如果您有一个相当简单的案例,您可以创建一个服务来保存信息,并将该服务注入到两个组件中。

这将要求服务在两个组件都可用的范围内。

【讨论】:

非常感谢 Grey,它成功了!!!我阅读了有关服务、getter 和 setter 的信息,它在两个组件中注入服务效果很好【参考方案2】:

您可以简单地使用Angular服务,阅读Angular网站上的'添加服务'教程,多读几遍,你就会完全明白。 点击网址:https://angular.io/tutorial/toh-pt4

【讨论】:

【参考方案3】:

App.component.ts

import  Component  from '@angular/core';
import dataService from './dataservice.service';
@Component(
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: [ './app.component.css' ]
)
export class AppComponent  
  //name = 'Angular';
  constructor(private SVC: dataService )

  
  sender()
    this.SVC.name="sender"
    console.log("sending this string:    "+this.SVC.name)
  


dataservice.service.ts

import  Injectable  from '@angular/core';

@Injectable()
export class dataService 
name=""
  constructor()   

recieved.component.ts

import  Component, OnInit  from '@angular/core';
import dataService from '../dataservice.service';
@Component(
  selector: 'app-recieved',
  templateUrl: './recieved.component.html',
  styleUrls: ['./recieved.component.css']
)
export class RecievedComponent implements OnInit 
  constructor(private dataservice: dataService )

  
  ngOnInit()  
  
print()
  console.log("recieved:    " +this.dataservice.name)


这里我在 app.component 中设置 name = "sender" 并在 received.component.ts 中使用它

demo

【讨论】:

以上是关于在 Angular 中,当组件不是父/子时,如何将值从一个组件传递到另一个组件?的主要内容,如果未能解决你的问题,请参考以下文章

Angular如何将数据从指令传递到父组件

如何在Angular中将表单数据从子组件传输到父组件

Angular 2:是不是可以在动态组件中绑定 var?

如果组件不是Angular2中的父子组件,如何在组件之间传递数据?

如何在 Angular 1.5 中从父控制器访问组件方法

如何使用 Angular 中的依赖注入将属性指令实例传递给嵌套组件