Измените имя кнопки в родительском компоненте после нажатия кнопки внутри модального окна (Angular 7)

Я работаю над проектом Angular 7, и я хочу изменить имя кнопки из родительского компонента после нажатия кнопки из дочернего компонента, который является модальным.

В настоящее время, когда я нажимаю "кнопку A" у родителя, открывается модальное окно. После этого, когда я нажимаю «Кнопку B» в модальном окне, я хочу, чтобы «Кнопка A» от родителя изменила свое имя, например, на «C». Я пробовал использовать localStorage, но это не сработало. У вас есть идеи, как это сделать?

Заранее спасибо!


person Anna    schedule 20.02.2019    source источник
comment
Использовать общий сервис и наблюдаемые? Несколько способов сделать это.   -  person Ric    schedule 20.02.2019


Ответы (1)


Способ связи от дочернего компонента к родительскому - через эмиттеры событий, сначала вы определяете вывод события в своем дочернем компоненте следующим образом:

@Output() clickedButton = new EventEmitter<Observable<any>>();

и затем, когда нажимаете кнопку, метод, реализующий это действие кнопки, должен генерировать событие следующим образом

this.clickedButton.emit(/* here goes any data you wanna pass to the parent component if its the case otherwise can be empty*/);

Далее в шаблоне родительского компонента просто добавьте (clickedButton) = «ваша функция для изменения текста кнопки», например:

<child-component (clickedButton)="changeButtonText($event)"></child-component>

и в родительском компоненте вы можете изменить текст кнопки на другой текст по своему усмотрению, если текст кнопки является переменной, или вы можете получить доступ к компоненту кнопки и изменить текст, но это звучит сложнее, чем вам нужно

changeButtonText($event:any){
this.buttonTextVariable = 'C'
}
person Tiago Silva    schedule 20.02.2019
comment
Спасибо! У меня ошибка: не удалось скомпилировать. ./node_modules/saucelabs/index.js. Ты знаешь почему? - person Anna; 20.02.2019
comment
Нет, к сожалению, никогда не использовал эту библиотеку saucelabs - person Tiago Silva; 20.02.2019