在学习Angular时,我意识到没有必要使用eventemitter从父组件发送数据到子组件eventemitter用来从子组件发送数据到父组件.
- 这是由于javascript的限制,或者Angular自己创建这样的机制,如果是这样,原因是什么?
- 我真的在寻找对这个的基本理解,并且会如果有人能给我一点提示,我将不胜感激。
我认为原因是(和Angular大多数时候一样)变更检测。一旦父属性发生更改,组件将尝试检测更改。这也将触发子组件中的变更检测(因为属性可以直接传递给子组件)。
这意味着隐式数据流是从父节点到子节点,这将导致只需要在这个方向上支持变更检测。如果另一个方向也被支持,你基本上可以渲染你的整个应用程序的任何更改。 这就是为什么需要有一个显式的原因。从孩子到父母传播变化的流程。因此使用EventEmitter。请记住,您正在处理树形结构。处理更改down树很简单(遍历树),但是在两个方向上处理它们(向上和向下遍历)会导致每次遍历整个树。
请注意,我所知道的所有其他框架都使用相同的方法。Props(就像在React中一样)可以隐式地传递给子组件,而更改可以"冒泡"。