検索
ホームページウェブフロントエンドjsチュートリアルAngular のコンポーネント間の通信のいくつかの方法の詳細な説明

この記事では、Angular のコンポーネント間のさまざまな種類の通信について詳しく説明します。一定の参考値があるので、困っている友達が参考になれば幸いです。

Angular のコンポーネント間の通信のいくつかの方法の詳細な説明

#Angular コンポーネント間の通信


コンポーネント間の 3 つの典型的な関係:


Angular のコンポーネント間の通信のいくつかの方法の詳細な説明

  • 親コンポーネント間の対話 (@Input/@Output/テンプレート変数/@ViewChild)

  • 親コンポーネントと子コンポーネント間の対話 (Service/localStorage)

  • 通信などにセッション パラメーターとルーティング パラメーターを使用することもできます。

推奨される関連チュートリアル: 「

angular チュートリアル 」 》

##親コンポーネントと子コンポーネント間の相互作用##子コンポーネントの記述

# # child.component.ts

@Component({
  selector: 'app-child',
  templateUrl: './child.component.html',
  styleUrls: ['./child.component.css']
})
export class ChildComponent implements OnInit {

  private _childTitle = '我是子组件';

  @Input()
  set childTitle(childTitle: string) {
    this._childTitle = childTitle;
  }

  get childTitle(): string {
    return this._childTitle;
  }

  @Output()
  messageEvent: EventEmitter<string> = new EventEmitter<string>();

  constructor() { }

  ngOnInit(): void {

  }

  sendMessage(): void {
    this.messageEvent.emit(&#39;我是子组件&#39;);
  }

  childFunction(): void {
    console.log(&#39;子组件的名字是:&#39; + this.childTitle);
  }

}

    child.component.html
  • <div class="panel panel-primary">
      <div class="panel-heading">{{childTitle}}</div>
      <div class="panel-body">
          <button (click)="sendMessage()" class="btn btn-success">给父组件发消息</button>
      </div>
    </div>
    親コンポーネント
## parent-and-child.component.ts

@Component({
  selector: &#39;app-parent-and-child&#39;,
  templateUrl: &#39;./parent-and-child.component.html&#39;,
  styleUrls: [&#39;./parent-and-child.component.css&#39;]
})
export class ParentAndChildComponent implements OnInit {

  constructor() { }

  ngOnInit(): void {
  }

  doSomething(event: any): void {
    alert(event);
  }

}

parent-and-child.component.html
  • <div class="panel panel-primary">
      <div class="panel-heading">父组件</div>
      <div class="panel-body">
        <app-child #child (messageEvent) = "doSomething($event)"></app-child>
        <button (click)="child.childFunction()" class="btn btn-success">调用子组件的方法</button>
      </div>
    </div>
  • @Input プロパティ バインディングは一方向です はい、親コンポーネントのプロパティの変更は子コンポーネントのプロパティの変更に影響しますが、子コンポーネントのプロパティの変更は親コンポーネントのプロパティの変更には影響しません。
    ただし、@Input() と @Output() を使用して、プロパティの双方向バインディングを実現できます。
  • @Input()
    value: string;
    @Output()
    valueChange: EventEmitter<any> = new EventEmitter();
    
    // 实现双向绑定
    <input [(value)] = "newValue"></input>
注:

双方向バインディングに

[()]

を使用する場合、出力属性名は入力属性名と Change で構成される必要があります。フォーム: xxxChange。

親コンポーネントと子コンポーネント以外のコンポーネント間の対話

対話にサービスを使用する

event-bus.service .ts

/**
 * 用于充当事件总线
 */
@Injectable()
export class EventBusService {

  evnetBus: Subject<string> = new Subject<string>();

  constructor() { }
}

child1.component.ts
  • @Component({
      selector: &#39;app-child1&#39;,
      templateUrl: &#39;./child1.component.html&#39;,
      styleUrls: [&#39;./child1.component.css&#39;]
    })
    export class Child1Component implements OnInit {
    
      constructor(private eventBusService: EventBusService) { }
    
      ngOnInit(): void {
      }
    
      triggerEventBus(): void {
        this.eventBusService.evnetBus.next(&#39;child1 触发的事件&#39;);
      }
    }
child1.component.html
  • <div class="panel panel-primary">
      <div class="panel-heading">child1 组件</div>
      <div class="panel-body">
        <button (click)="triggerEventBus()" class="btn btn-success">触发事件</button>
      </div>
    </div>
child2 .component.ts
  • @Component({
      selector: &#39;app-child2&#39;,
      templateUrl: &#39;./child2.component.html&#39;,
      styleUrls: [&#39;./child2.component.css&#39;]
    })
    export class Child2Component implements OnInit {
    
      events: Array<string> = new Array<string>();
    
      constructor(private eventBusService: EventBusService) { }
    
      ngOnInit(): void {
        this.listenerEvent();
      }
    
      listenerEvent(): void {
        this.eventBusService.evnetBus.subscribe( value => {
          this.events.push(value);
        });
      }
    }
child2.component.html
  • <div class="panel panel-primary">
      <div class="panel-heading">child2 组件</div>
      <div class="panel-body">
         <p *ngFor="let event of events">{{event}}</p>
      </div>
    </div>
brother.component.ts
  • @Component({
      selector: &#39;app-brother&#39;,
      templateUrl: &#39;./brother.component.html&#39;,
      styleUrls: [&#39;./brother.component.css&#39;]
    })
    export class BrotherComponent implements OnInit {
    
      constructor() { }
    
      ngOnInit(): void {
      }
    
    }
brother.component.html
  • <div class="panel panel-primary">
      <div class="panel-heading">第二种:没有父子关系的组件间通讯</div>
      <div class="panel-body">
        <app-child1></app-child1>
        <app-child2></app-child2>
      </div>
    </div>
localStorage を使用して対話する
  • ##local-child1.component.ts

@Component({
  selector: &#39;app-local-child1&#39;,
  templateUrl: &#39;./local-child1.component.html&#39;,
  styleUrls: [&#39;./local-child1.component.css&#39;]
})
export class LocalChild1Component implements OnInit {

  constructor() { }

  ngOnInit(): void {
  }

  writeData(): void {
    window.localStorage.setItem(&#39;message&#39;, JSON.stringify({name: &#39;star&#39;, age: 22}));
  }

}
local-child1.component.html

    <div class="panel panel-primary">
      <div class="panel-heading"> LocalChild1 组件</div>
      <div class="panel-body">
         <button class="btn btn-success" (click)="writeData()">写入数据</button>
      </div>
    </div>
  • local-child2.component.ts
    @Component({
      selector: &#39;app-local-child2&#39;,
      templateUrl: &#39;./local-child2.component.html&#39;,
      styleUrls: [&#39;./local-child2.component.css&#39;]
    })
    export class LocalChild2Component implements OnInit {
    
      constructor() { }
    
      ngOnInit(): void {
      }
    
      readData(): void {
        const dataStr = window.localStorage.getItem(&#39;message&#39;);
        const data = JSON.parse(dataStr);
        console.log(&#39;name:&#39; + data.name, &#39;age:&#39; + data.age);
      }
    
    }
  • local- child2 .component.html
    <div class="panel panel-primary">
      <div class="panel-heading">LocalChild2 组件</div>
      <div class="panel-body">
        <button class="btn btn-success" (click)="readData()">读取数据</button>
      </div>
    </div>
  • local-storage.component.ts
    @Component({
      selector: &#39;app-local-storage&#39;,
      templateUrl: &#39;./local-storage.component.html&#39;,
      styleUrls: [&#39;./local-storage.component.css&#39;]
    })
    export class LocalStorageComponent implements OnInit {
    
      constructor() { }
    
      ngOnInit(): void {
      }
    
    }
  • #local-storage.component.html
  • # #
    <div class="panel panel-primary">
      <div class="panel-heading">第三种方案:利用 localStorge 通讯</div>
      <div class="panel-body">
        <app-local-child1></app-local-child1>
        <app-local-child2></app-local-child2>
      </div>
    </div>
最後に、セッション パラメーターとルーティング パラメーターを使用してデータ対話を実現する方法は、ここでは説明しません。
  • プログラミング関連の知識について詳しくは、
  • プログラミング ビデオ
をご覧ください。 !

    以上がAngular のコンポーネント間の通信のいくつかの方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事はcsdnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
    Python vs. JavaScript:開発環境とツールPython vs. JavaScript:開発環境とツールApr 26, 2025 am 12:09 AM

    開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

    JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

    はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

    JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

    JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

    CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

    CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

    Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

    JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

    Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

    Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

    JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

    CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

    JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

    現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    VSCode Windows 64 ビットのダウンロード

    VSCode Windows 64 ビットのダウンロード

    Microsoft によって発売された無料で強力な IDE エディター

    AtomエディタMac版ダウンロード

    AtomエディタMac版ダウンロード

    最も人気のあるオープンソースエディター

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    強力な PHP 統合開発環境

    MinGW - Minimalist GNU for Windows

    MinGW - Minimalist GNU for Windows

    このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

    DVWA

    DVWA

    Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、