Angular 如何实现组件通讯 - 教程

在 Angular 中,组件通讯是非常重要的一部分。由于 Angular 是基于组件的架构,因此不同组件之间的通讯是必须的。在本文中,我们将探讨 Angular 中的组件通讯以及如何实现它。

组件通讯的类型

在 Angular 中,组件通讯可以分为以下几种类型:

  1. 父子组件通讯:父组件向子组件传递数据和事件。
  2. 子父组件通讯:子组件向父组件传递数据和事件。
  3. 兄弟组件通讯:兄弟组件之间传递数据和事件。

接下来,我们将分别探讨这三种类型的组件通讯方式。

父子组件通讯

在 Angular 中,父组件向子组件传递数据和事件可以使用输入装饰器和输出装饰器。下面是一个简单示例:

------ - ---------- ------ ------- ------------ - ---- ----------------

------------
  --------- -------------
  --------- -
    ---------- --------------- ------------------------------------------------
  --
--
------ ----- --------------- -
  ----- - ------- --------

  ------------------ ------- -
    ---------- - ------
  -
-

------------
  --------- ------------
  --------- -
    ------ ----- -------
    ------- ------------------------------------ ------ --------------
  --
--
------ ----- -------------- -
  -------- ------ -------
  --------- ----------- - --- -----------------------

  ------------------- -
    -------------------------- --------
  -
-

在上面的示例中,父组件 ParentComponent 向子组件 ChildComponent 传递了一个 title 属性,并监听了 updateTitle 事件。子组件 ChildComponent 接收了 title 属性,并定义了一个 updateTitle 输出事件。当子组件中的按钮被点击时,它将调用 updateTitle 事件并传递一个新的标题。

子父组件通讯

在 Angular 中,子组件向父组件传递数据和事件可以使用 EventEmitter。下面是一个简单示例:

------ - ---------- ------- ------------ - ---- ----------------

------------
  --------- ------------
  --------- -
    ------- ------------------------------------ ------ --------------
  --
--
------ ----- -------------- -
  --------- ----------- - --- -----------------------

  ------------------- -
    -------------------------- --------
  -
-

------------
  --------- -------------
  --------- -
    ------ ----- -------
    ---------- ------------------------------------------------
  --
--
------ ----- --------------- -
  ----- - ------- --------

  ------------------ ------- -
    ---------- - ------
  -
-

在上面的示例中,子组件 ChildComponent 定义了一个 updateTitle 输出事件,当按钮被点击时,它将调用 updateTitle 事件并传递一个新的标题。父组件 ParentComponent 将监听 updateTitle 事件,当事件触发时将更新它自己的标题。

兄弟组件通讯

在 Angular 中,兄弟组件通讯通常需要使用一个共享服务。下面是一个简单示例:

------ - ---------- - ---- ----------------
------ - ------- - ---- -------

-------------
  ----------- -------
--
------ ----- ----------- -
  ------- ------------- - --- ------------------
  -------- - ----------------------------------

  -------------------- ------- -
    ---------------------------------
  -
-

------------
  --------- ----------------
  --------- -
    ------ ----------- --------------------- --------------------------------
  --
--
------ ----- ----------------- -
  -------- -------

  ------------------- ------------ ------------ --

  ------------- -
    -------------------------------------------
  -
-

------------
  --------- ----------------
  --------- -
    ----- ------- ------
  --
--
------ ----- ----------------- -
  -------- -------

  ------------------- ------------ ------------ --

  ---------- -
    ------------------------------------------- -- -
      ------------ - --------
    ---
  -
-

在上面的示例中,共享服务 DataService 定义了一个 message$ 可观察对象和一个 sendMessage 方法,当 sendMessage 方法被调用时,它将发送一个新的消息。

兄弟组件 Sibling1ComponentSibling2Component 都注入了共享服务 DataService。当 Sibling1Component 中的输入框发生变化时,它将调用 sendMessage 方法发送一个新消息。当 Sibling2Component 初始化时,它会订阅 message$ 可观察对象并更新消息。

总结

在本文中,我们探讨了 Angular 中的组件通讯。我们讲解了三种不同的组件通讯类型并提供了具体的示例代码。希望这篇文章能对你理解 Angular 中的组件通讯有所帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/664d9ebfd3423812e4d2b4fc