Вызов функции из другого компонента в текущий в angular без каких-либо родительских дочерних отношений

Я хочу вызвать myrole() из КомпонентДва в компонентОдин без родительского дочернего отношения. ComponentOne является основным компонентом. После нажатия MyRoleClick() я хочу вызвать myrole() из ComponentTwo

export class ComponentOne{
  MyRoleClick(){
     want to call myrole() of ComponentTwo without parent child relation here.
  }
}

export class ComponentTwo{

 myrole(){

 }

}

не родственный компонент @Narm

yash 20.06.2019 17:52

Похоже на родственные отношения. Каково отношение компонентов, пожалуйста, предоставьте больше информации и контекста.

Narm 20.06.2019 17:54

Они являются независимыми компонентами, просто два компонента в разных файлах, чтобы объяснить, я написал один за другим.

yash 20.06.2019 17:54

Это все еще звучит как братья и сестры. Не могли бы вы предоставить код, демонстрирующий, как вы планируете использовать эти компоненты в HTML? Вы задаетесь вопросом, как это выглядит, почти идентично эта почта

Narm 20.06.2019 17:59

Что есть в методе myrole()? Не могли бы вы уточнить немного вашего требования. Может быть, есть лучший подход к вашей проблеме, а не вызов метода в полностью изолированном компоненте.

Ntwobike 20.06.2019 17:59

@Narm «Возможный дубликат» может не помочь, если компоненты не включены в один и тот же файл.

Maihan Nijat 20.06.2019 18:01

Как показывает один из ответов на дубликат, все способы связи между компонентами описаны в документации: angular.io/guide/component-interaction.

JB Nizet 20.06.2019 18:03
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
3
8
99
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, что самый чистый подход — создать службу (то есть RoleService), которую вы используете в обоих компонентах. Из вашего первого компонента вызовите метод в своей службе, создайте наблюдаемую в своей службе, для которой вы передаете значение. В вашем втором компоненте подпишитесь на этот наблюдаемый. Убедитесь, что вы предоставляете свою службу высоко в своей структуре (например, ваш app.module.ts), чтобы ваши компоненты использовали точно такой же экземпляр этого объекта службы.

Ответ принят как подходящий

Хорошим решением этой проблемы было бы создание службы, содержащей тему rxjs, чтобы первый компонент мог подписаться, а второй мог выдавать значения, чтобы сообщить другому, что он должен вызывать функцию.

ПРИМЕР

export class ComponentOne {
    constructor(private myService: MyService) {}

    ngOnInit() {
        this.myService.subject.asObservable().subscribe(() => this.myRoleClick())
    }

    myRoleClick() {
        // DO something
    }
}

export class ComponentTwo() {
    constructor(private myService: MyService) {}

    myRole() {
        this.myService.subject.next();
    }
}

export class MyService {
    subject = new Subject<void>();
}

Другие вопросы по теме