typescript 将变量内容发送到其他(不相关)组件Angular

t1rydlwq  于 2023-03-04  发布在  TypeScript
关注(0)|答案(3)|浏览(128)

我正在尝试将变量的内容发送到其他组件,以便可以在其他组件中使用该值(两个组件是不同的页面,彼此不相关,但我不需要在任何页面上显示变量内容,我只需要使用其他typescript组件上的变量内容)。我不能让它在任何教程中正常工作,我只是不我不知道该怎么办了。
This is the file layout (need to send variable content from week component to day component)
以下代码位于p1_week-chart.component.ts中:

else if (chart.data.labels[activeEls[0].index] == "Wednesday") {
          this.dayClicked = new Date(this.today);
          this.dayClicked.setDate(this.dayClicked.getDate() + 2);
          console.log(this.dayClicked);
          //want to send content of this.dayClicked to other component (p1_day-chart.component.ts)

额外的信息:我不需要在html中的任何东西,我只需要这部分的 typescript
非常感谢帮助!
(我尝试了很多不同的解决方案,包括BehaviorSubject,但我就是无法让它发送this.dayClicked to the p1_day-chart. component. ts的内容。我看到其他一些人在这里问了同样的问题,但我看了很多,我仍然无法让它工作。)

ar7v8xwq

ar7v8xwq1#

如果组件是不相关的,一个简单的方法就是将变量从一个组件发送到另一个组件。为此,您需要一个服务,如:

import { Injectable, EventEmitter } from '@angular/core';
import { Subscription } from 'rxjs/internal/Subscription';

@Injectable({
  providedIn: 'root'
})
export class SharedParamsService {

  invokeFirstComponentFunction = new EventEmitter();
  subsVar: Subscription;

  constructor() { }

  onUpdateEnv(key, val) {
    var toEmit = [key, val]
    this.invokeFirstComponentFunction.emit(toEmit);
  }
}

在发出变量的组件中:

  • 导入共享参数服务
  • 在构造函数中声明私有sharedParams:SharedParamsService,然后在代码中,您已经准备好发出变量:

onUpdateEnv(“点击的日期”,点击的日期);
在需要接收变量的组件中:

  • 导入共享参数服务
  • 在构造函数中声明私有sharedParams:共享参数服务

subsVar =这个. sharedParams.invokeFirstComponentFunction .subscribe((发出的)=〉{如果(发出的[0] ==“点击日期”){这个.点击日期接收的=发出的[1];} });

ubbxdtey

ubbxdtey2#

基于你所说的问题@s_frix,
需要接收的组件当前具有以下内容:

import { SharedParamsService } from 'src/app/components/charts/testcomponent';

//Other not important code left out obviously between this

//if dayClickedReceived: any; is added and console logged in ngOnInit() it will show "undefined"

  constructor(private http : HttpClient,
    private globalvars: GlobalvarsService, //not important
           private adapter: DateAdapter<any>, //not important 
    private datePipe: DatePipe, //not important
  private sharedParams: SharedParamsService) { console.log(this.urlDate); }
//ignore the console log that's for something else
              
  ngOnInit(): void {
  this.sharedParams.subsVar = this.sharedParams.invokeFirstComponentFunction .subscribe((emitted) => { if (emitted[0] == "Day clicked") { this.dayClickedReceived = emitted[1]; } });
}

获取错误:"属性'dayClickedReceived'不存在..."如果我创建了它并在控制台记录它,当我切换到需要接收的页面时,它会返回为"未定义"。(当我发送事件时,我确实直接获得了正确的控制台日志,但这没有用,因为我需要在其他页面上使用它,当我转到该页面时,dayClickedReceived再次未定义)
基本上,当我在需要发送变量并使其运行的页面上时,需要发生什么,然后我单击另一个页面(需要接收变量),在那里我想使用变量的内容

bxgwgixi

bxgwgixi3#

我是这样让它工作的:

//Service:
import { Injectable, EventEmitter } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class SharedParamsService {

  message: string
  
  constructor() { }
  setMessage(data)
  {
    this.message=data
  }
  getMessage() {
    return this.message
  }

}

//Sending component:
message: any;

 constructor(private sharedParams: SharedParamsService){}

//when the action happens and variable needs to be send
this.sharedParams.setMessage(this.dayClicked);

//Receiving component:
message: any;

constructor(private sharedParams: SharedParamsService){}

 ngOnInit(): void {
    this.message = this.sharedParams.getMessage(); 
}
//now this.message is the correct variable that I sent and that I will use in this component later on

谢谢大家的回答,真的很感激!:)

相关问题