任何指令和管道必须在模块的声明中。为什么不能将它们添加到组件级别,而是始终必须处于模块级别?为什么有角度的团队有这个限制?
答案 0 :(得分:2)
Angular团队在介绍模块时讨论了弃用组件级指令here的原因。
弃用
将指令和管道导入组件的能力将是 弃用。这意味着在弃用之后会出现以下属性 将被删除:
@Component.directives
和@Component.pipes
。为什么
保持
@Component.directives
/pipes
会导致以下问题:两个范围
它创建了两个范围:模块范围和组件范围。模块 scoped与ES6模块的工作方式非常相似。结果就是这样 易于向用户解释。我们必须拥有开发人体工程学。 组件范围是独一无二的,难以解释。
打破ES6心理模型
让组件范围破坏ES6心智模型。在ES6中使用 您必须从模块导入它的令牌。代币不只是出现 从哪儿冒出来。使用材料成分很容易解释 你需要导入正确的模块。因为那就是你要做的 与ES6。
没有人会使用它
模块创建足够小的范围以避免冲突,它们是 显着更符合人体工程学。因为使用模块更符合人体工程学,
Component.directives
选项不会在实践中使用。作为一个 新的Angular用户我必须使用模块来获取我的表单和常见 指令,所以我很自然地在那里添加自己的指令。
没有什么可以阻止你只有exports
单个组件的模块,这将允许你将任何指令和管道范围扩展到该特定组件,这比使用更具一致性和更容易推理在某些情况下,组件可以有效地成为自己的模块。