为什么所有指令和管道都必须在模块的声明中?

时间:2017-08-20 10:26:02

标签: angular angular2-directives angular2-pipe

任何指令和管道必须在模块的声明中。为什么不能将它们添加到组件级别,而是始终必须处于模块级别?为什么有角度的团队有这个限制?

1 个答案:

答案 0 :(得分:2)

Angular团队在介绍模块时讨论了弃用组件级指令here的原因。

  

弃用

     

将指令和管道导入组件的能力将是   弃用。这意味着在弃用之后会出现以下属性   将被删除:@Component.directives@Component.pipes

     

为什么

     

保持@Component.directives / pipes会导致以下问题:

     

两个范围

     

它创建了两个范围:模块范围和组件范围。模块   scoped与ES6模块的工作方式非常相似。结果就是这样   易于向用户解释。我们必须拥有开发人体工程学。   组件范围是独一无二的,难以解释。

     

打破ES6心理模型

     

让组件范围破坏ES6心智模型。在ES6中使用   您必须从模块导入它的令牌。代币不只是出现   从哪儿冒出来。使用材料成分很容易解释   你需要导入正确的模块。因为那就是你要做的   与ES6。

     

没有人会使用它

     

模块创建足够小的范围以避免冲突,它们是   显着更符合人体工程学。因为使用模块更符合人体工程学,   Component.directives选项不会在实践中使用。作为一个   新的Angular用户我必须使用模块来获取我的表单和常见   指令,所以我很自然地在那里添加自己的指令。

没有什么可以阻止你只有exports单个组件的模块,这将允许你将任何指令和管道范围扩展到该特定组件,这比使用更具一致性和更容易推理在某些情况下,组件可以有效地成为自己的模块。