Angular 2 组件 @Input 不起作用的问题

在 Angular 2 中,组件通常需要与其它组件进行交互。为了实现组件之间的通信,可以使用输入和输出属性。其中,@Input 装饰器用于声明一个组件的属性是可输入的,即该属性可以从其它组件中传入值。

但是,在实际开发中,有时候会遇到 @Input 不起作用的问题。这篇文章将介绍一些常见的原因和解决方法。

原因一:属性名称拼写错误

当我们在组件中定义了一个 @Input 属性后,我们需要在其它组件中使用该属性,并且要确保输入属性的名称与定义时相同。如果输入属性的名称拼写错误,则无法正确获取传递的值。

以下是一个示例代码:

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

在父组件中使用:

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

上述代码中,我们将输入属性 message 的名称拼写错误为 messag,导致无法正常传递值。应该修改为:

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

原因二:父组件没有传递值

如果父组件没有传递值给子组件的输入属性,那么子组件就无法获取到传递的值。

以下是一个示例代码:

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

在父组件中未传递值:

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

上述代码中,我们没有传递任何值给 message 属性,因此无法显示任何消息。应该修改为:

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

原因三:变更检测策略不正确

在 Angular 中,组件默认使用 OnPush 变更检测策略。如果我们没有正确配置变更检测策略,则可能会导致输入属性无法正常更新。

以下是一个示例代码:

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

在父组件中更新:

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

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

上述代码中,我们在子组件中使用了 OnPush 变更检测策略,而在父组件中使用了默认的变更检测策略。因此,当我们更新 message 属性时,子组件无法获取到更新后的值。应该将父组件中的变更检测策略改为 OnPush:

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

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

结论

在 Angular 2 中,@Input 装饰器是实现组件间通信的重要方式。当 @Input 不起作用时,我们可以检查属性名称拼写、父组件是否传递了值以及变更检测策略是否正确等问题。同时,建议开发者多运

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