Angular5の兄弟コンポーネントを切り替えます

GRowing

ある兄弟コンポーネントのクリックイベントを別の兄弟コンポーネントに「聞かれる」ようにしようとしています。

イベントをチェーンの上位で親に渡し、変更を検出してから、何らかの方法で親を介して兄弟(親とは別の子)に渡す必要がありますか?

ページテンプレートのコンポーネント:

<wrap>
  <toggler>Toggle the Box</toggler>
  <box>Box Content ...</box>
</wrap>

トグラーコンポーネント:

@Component({
  selector: 'toggler',
  template: `<div (click)="toggleBox()"><ng-content></ng-content></div>`,
})
export class TogglerComponent {
  @Output() toggle = new EventEmitter<boolean>();
  visible: boolean = false;
  toggleBox(): void {
    this.visible = !this.visible;
    this.toggle.emit(this.visible);
  }
}

ボックスコンポーネント:ボックスコンポーネントはどのようにしてトグルイベントを取得できますか?

基本コンポーネント:

@Component({
  selector: 'box',
  template: `<ng-content *ngIf="toggle"></ng-content>`,
})
export class BoxComponent {
  @Input() toggle: boolean;
}
J.ピカルド

兄弟コンポーネントの通信を実現するには、いくつかの方法があります。

1.サービス

最初のオプションは、公開された監視可能なプロパティを持つサービスを用意し、それをコンポーネントに注入することです。

@Injectable()
export class ToggleService {

  private toggle = new Subject<boolean>();

  public $toggle = this.toggle.asObservable();

  constructor() { }

  setToggle(val: boolean){
    this.toggle.next(val);
  }

}

そこからあなたのコンポーネントは

TogglerComponent
export class TogglerComponent {


  constructor(toggleService: ToggleService){}

  visible: boolean = false;
  toggleBox(): void {
    this.visible = !this.visible;
    this.toggleService.setToggle(this.visible);
  }
}
BoxComponent
export class BoxComponent implements OnInit {

   constructor(toggleService: TogglerService){

   }

   ngOnInit(){
     this.toggleService.$toggle.subscribe(val => {
       // Do Something
     });
   }
}

注:このアプローチでは、両方のコンポーネントがサービスの同じインスタンスを共有する必要があるため、DIスコープに注意する必要があります。したがって、プロバイダーは、親コンポーネントか、共有モジュールまたは親モジュールのいずれかにある必要があります。

2.親プロパティ

2番目の方法は、親にプロパティを持ち、それを両方のコンポーネントにバインドすることです。

あなたParentComponentは何か悪いことになるでしょう

export class ParentComponent implements OnInit {

  public toggle: boolean;

  constructor() { }

  ngOnInit() {
  }

  changeToggle(val){
    this.toggle = val;
  }

}

そして、あなたのテンプレートはその関数とプロパティをバインドするだけです

<toggler (toggle)="changeToggle(toggle)"/>
<box [toggle]="toggle"/>

3. BindingLessソリューション(非推奨)

あなたのコメントに基づいて、を使用した別の方法がありますViewChild。これは次のようになります。

export class ParentComponent implements AfterViewInit {

  @ViewChild(TogglerComponent)
  togglerComponent: TogglerComponent;

  @ViewChild(BoxComponent)
  boxComponent: BoxComponent

  constructor() { }

  ngAfterViewInit() {

    this.togglerComponent.toggle
      .subscribe(val => this.boxComponent.toggle = val)

  }

}

詳細については、https//angular.io/guide/component-interactionを確認してください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

別の兄弟コンポーネントからモーダルコンポーネントを切り替えます

分類Dev

テンプレートのようなAngular5のコンポーネントを切り替える方法は?

分類Dev

Angular8コンポーネントでMatSlideToggleを切り替えます

分類Dev

コンポーネントのバリデータを切り替えます

分類Dev

Svelteコンポーネントのクラスを切り替えます

分類Dev

別のコンポーネントから状態を切り替えます

分類Dev

現在のコンポーネントをクリックしたときにクラス名の兄弟コンポーネントを削除し、現在のコンポーネントを切り替えてクラス自体を削除します

分類Dev

Angular:別のコンポーネントからHostBindingを切り替えますか?

分類Dev

Angular5で2つの兄弟コンポーネントが相互に通信できるようにします

分類Dev

Angular5子コンポーネントから親コンポーネントの値を更新します

分類Dev

ルートに応じてコンポーネントを切り替えますAngular4

分類Dev

RxJSを使用したAngular5 +兄弟コンポーネント通信(件名)

分類Dev

Angular5のdivにコンポーネントを動的に追加します

分類Dev

クラスを親コンポーネントに切り替えます-React

分類Dev

Angular 2:異なるコンポーネントからsidenavを切り替えます

分類Dev

VUEの親コンポーネントからモーダルダイアログを切り替えます

分類Dev

Reactの異なるコンポーネントのdiv要素を切り替えます

分類Dev

VUE子コンポーネント要素の可視性を切り替えます

分類Dev

子コンポーネントのアクティブクラスを切り替えます

分類Dev

Vueコンポーネント、データの切り替え

分類Dev

Angular5の兄弟コンポーネントの2つのセット間でデータを共有する

分類Dev

Angular5で子コンポーネントを更新する

分類Dev

コンポーネントを動的に追加するAngular5

分類Dev

引数を期待するAngular5コンポーネント

分類Dev

Vue-コンポーネント間の切り替え

分類Dev

Angular6 +によってメインアプリコンポーネントに影響を与えるヘッダーコンポーネントのボタンでクラスを切り替えます

分類Dev

Angular5はngModelをコンポーネントに渡します

分類Dev

コンポーネントのクラスを切り替えるVueJSの方法

分類Dev

深いスタイルは、Angular5のコンポーネントごとに異なります。

Related 関連記事

  1. 1

    別の兄弟コンポーネントからモーダルコンポーネントを切り替えます

  2. 2

    テンプレートのようなAngular5のコンポーネントを切り替える方法は?

  3. 3

    Angular8コンポーネントでMatSlideToggleを切り替えます

  4. 4

    コンポーネントのバリデータを切り替えます

  5. 5

    Svelteコンポーネントのクラスを切り替えます

  6. 6

    別のコンポーネントから状態を切り替えます

  7. 7

    現在のコンポーネントをクリックしたときにクラス名の兄弟コンポーネントを削除し、現在のコンポーネントを切り替えてクラス自体を削除します

  8. 8

    Angular:別のコンポーネントからHostBindingを切り替えますか?

  9. 9

    Angular5で2つの兄弟コンポーネントが相互に通信できるようにします

  10. 10

    Angular5子コンポーネントから親コンポーネントの値を更新します

  11. 11

    ルートに応じてコンポーネントを切り替えますAngular4

  12. 12

    RxJSを使用したAngular5 +兄弟コンポーネント通信(件名)

  13. 13

    Angular5のdivにコンポーネントを動的に追加します

  14. 14

    クラスを親コンポーネントに切り替えます-React

  15. 15

    Angular 2:異なるコンポーネントからsidenavを切り替えます

  16. 16

    VUEの親コンポーネントからモーダルダイアログを切り替えます

  17. 17

    Reactの異なるコンポーネントのdiv要素を切り替えます

  18. 18

    VUE子コンポーネント要素の可視性を切り替えます

  19. 19

    子コンポーネントのアクティブクラスを切り替えます

  20. 20

    Vueコンポーネント、データの切り替え

  21. 21

    Angular5の兄弟コンポーネントの2つのセット間でデータを共有する

  22. 22

    Angular5で子コンポーネントを更新する

  23. 23

    コンポーネントを動的に追加するAngular5

  24. 24

    引数を期待するAngular5コンポーネント

  25. 25

    Vue-コンポーネント間の切り替え

  26. 26

    Angular6 +によってメインアプリコンポーネントに影響を与えるヘッダーコンポーネントのボタンでクラスを切り替えます

  27. 27

    Angular5はngModelをコンポーネントに渡します

  28. 28

    コンポーネントのクラスを切り替えるVueJSの方法

  29. 29

    深いスタイルは、Angular5のコンポーネントごとに異なります。

ホットタグ

アーカイブ