[英]How to use a variable from a component in another in Angular
I have two component.我有两个组成部分。 alert-component and master component .警报组件和主组件。
Now I want to use master-component variable into alert component.现在我想将 master-component 变量用于警报组件。
But without import it because in master-component I have already import alert-component.但是没有导入它,因为在主组件中我已经导入了警报组件。
And again if I try to import master-component into alert-component then it will throw circular dependency error.再一次,如果我尝试将主组件导入警报组件,那么它会抛出循环依赖错误。
So I want to access variable of master-component into alert-component without import it.所以我想访问 master-component 的变量到 alert-component 而不导入它。
So its possible?那么有可能吗?
You could use an @Input() variable for your alert component and forward it within your master component.您可以为您的警报组件使用 @Input() 变量并将其转发到您的主组件中。 In the Master Component's template, inject the alert component and forward the input with square brackets:在主组件的模板中,注入警报组件并使用方括号转发输入:
// master.component.html
...
<alert-component [alertInput1]="masterVariable1"></alert-component>
...
In the master component's controller, have the variable defined, that you want to forward to the child component:在主组件的 controller 中,定义了要转发给子组件的变量:
// master.component.ts
{
...
public masterVariable1: string = "test content from master";
...
}
In the child component's controller, define the input variable:在子组件的controller中,定义输入变量:
// alert.component.ts
{
...
@Input() alertInput1: string = undefined; // alertInput1 will get the value "test content from master"
...
}
Further reading about input/output binding between parent and child components: https://angular.io/guide/inputs-outputs进一步阅读父子组件之间的输入/输出绑定: https://angular.io/guide/inputs-outputs
Update : If your alert component is no child of the master component, then a service can be used to share data between them.更新:如果您的警报组件不是主组件的子组件,则可以使用服务在它们之间共享数据。
Here is the implementation of a new service, that holds a boolean variable inside an BehaviourSubject:下面是一个新服务的实现,它在 BehaviourSubject 中包含一个 boolean 变量:
// share-service.ts
@Injectable()
export class ShareService {
public isValid$: BehaviourSubject<boolean> = new BehaviourSubject<boolean>(false);
constructor() {}
public setValid(value: boolean): void {
this.isValid$.next(value);
}
}
I did not get, if your MasterComponent shall forward the data to the AlertComponent or vide versa, so in the following example, the MasterComponent updates the isValid of the ShareService, and the AlertComponent receives it.我没有得到,如果您的 MasterComponent 应将数据转发给 AlertComponent 或者反之亦然,所以在下面的示例中,MasterComponent 更新 ShareService 的 isValid,AlertComponent 接收它。
Now, the master component can inject the service and update the value for the behavioursubject.现在,主组件可以注入服务并更新行为主题的值。 For showcase, I update it inside the OnInit method, but you can use it anywhere, where suitable:为了展示,我在 OnInit 方法中更新了它,但您可以在任何合适的地方使用它:
// master.component.ts
export class MasterComponent implements OnInit {
constructor(private shareService: ShareService) {}
ngOnInit(): void {
this.shareService.setValid(true); // update valid to true
}
}
Now, the AlertComponent can also inject the same service and listen on the behaviourSubject for updates:现在,AlertComponent 也可以注入相同的服务并监听 behaviorSubject 以获取更新:
// alert.component.ts
export class AlertComponent implements OnInit {
constructor(private shareService: ShareService) {}
public ngOnInit(): void {
this.shareService.isValid$.subscribe(isValid => {
if (isValid) {
// insert code for isValid === true
} else {
// insert code for isValid === false
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.