Я новичок в Angular. Я пытаюсь получить доступ / мутировать переменную родительского компонента из дочернего компонента. Я нарисовал небольшую диаграмму, чтобы объяснить мою структуру.
- Метка 1: родительский компонент, в котором находится переменная (подлежащая мутированию).
- Метка 2: дочерний компонент который изменит родительскую переменную при событии щелчка.
- Метка 3: кнопка внутри дочернего элемента, которая будет вызывать изменение.
![enter image description here](https://i.stack.imgur.com/ko5Kf.png)
Я проверил множество решений, таких как:
- Изменение состояния родительского компонента из дочернего компонента
- Angular доступ к родительской переменной из дочернего компонента
- Angular2: переменная / функция родительского класса для доступа к дочернему компоненту
Но я не могу решить свою проблему. Я также создал stackblitz . Пожалуйста, посмотрите на мой код.
timeselector.component.ts
import { Component, ViewChild } from '@angular/core';
import { MonthpickerComponent } from '../monthpicker/monthpicker.component';
@Component({
...
})
export class TimeselectorComponent {
x : boolean=false;
@ViewChild('primaryMonthPicker', {static: false}) primaryMonthPicker: MonthpickerComponent;
recievedFromChild:string="Intentionally left blank";
GetOutputVal($event) {
this.recievedFromChild=$event;
}
}
monthpicker.component.ts
import { Component, EventEmitter, Output } from '@angular/core';
@Component({
...
})
export class MonthpickerComponent {
@Output() outputToParent = new EventEmitter<string>();
constructor() {}
sendToParent(string:string) {
this.outputToParent.emit(string);
}
buttonClicked() {
// some logic to access and change timeselector's x
console.log("Change handler called");
}
ngOnInit() {
}
}
Моя настоящая проблема намного сложнее, чем эта. Но я пытался воспроизвести то же самое. Я просто хочу увидеть логику c того, как это делается, тогда я справлюсь с вещами по-своему. Я хочу изменить значение x
на true
.
Эксперт сказал мне создать сервис. Но проект очень сложный, и я не могу внести в него изменения. Это командный проект. Есть ли быстрое решение или менее болезненное решение? Пожалуйста, поправьте меня, я полностью заблокирован из-за этого. Вот стекблиц .