Angular-styleguide: controllerAs 语法名称冲突

创建于 2015-11-05  ·  9评论  ·  资料来源: johnpapa/angular-styleguide

你好,

我今天发现了一些关于 Angualr 1 中的 controllerAs 语法的东西。在我的 Angular 1 应用程序中,我尝试通过使用指令来定义单个组件来应用组件架构。 该指令有自己的控制器controllerAs: 'vm' 。 我还使用 angular-ui 路由器在视图之间导航。 我发现如果我有一个用controllerAs: 'vm'定义的路由,然后我在视图中使用一个定义controllerAs: 'vm'的指令,父控制器的 vm 会被覆盖。 即使在指令上使用隔离范围,行为也是相同的。 但是,如果我在controllerAs参数中为路由器和指令(例如controllerAs: 'componentVm' )指定不同的名称,则一切正常。

我想知道我是否做错了什么? 如果不是,如果这是预期的行为,那么在 Angular 1 中使用组件架构和指令特定控制器时,在样式指南中添加一些提到潜在的 controllerAs 名称冲突可能是个好主意。

亲切的问候

尤瑟夫

Angular 1 help wanted question

最有用的评论

使用 vm 直到不清楚。 然后使用更具描述性的名称。
这就是我喜欢的。

所有9条评论

风格指南已经说:

“注意:在处理更大的代码库时,使用更具描述性的名称有助于减轻认知开销和可搜索性。避免过于冗长的名称,以免输入繁琐。”

所以我认为@johnpapa已经很好地涵盖了这一点。 也许一个小小的改进是提到使用嵌套控制器算作“更大的代码库”。

(但是……如果您使用隔离良好的组件进行构建,那么即使在大型项目中,您也可能很少有非常明确的嵌套控制器。)

样式指南的那部分是相当新的,可能可以在 IMO 中进行一些扩展/改进。
有关更多信息,请参阅此对话: https :

如果您认为它会有所帮助,请随意制作 PR 以在嵌套控制器上添加一些内容

我对 Angular 有点陌生,只是从 angular 1.4.8 过渡到 1.5.0。 嵌套指令时,我遇到了同样的问题。 父指令将 controllerAs 属性作为 'vm' 被子指令覆盖。 为孩子添加一个隔离范围为我解决了这个问题,但我可以看到这些可能会导致问题的地方。

如果您认为它会有所帮助,请随意制作 PR 以在嵌套控制器上添加一些内容

根据我命名 Angular 1 控制器的经验,在可用选项中,以组件本身的名称重命名它们是最有意义的。 这只会随着在一种类型中嵌套相同类型的组件而失败,在大型应用程序的经验中,这种情况不会经常出现。

所以为了澄清,我建议在样式指南中更改此规则以推荐使用组件的名称。

使用 vm 直到不清楚。 然后使用更具描述性的名称。
这就是我喜欢的。

我遇到了与 jusefb 在 2015 年 11 月报告的问题相同的问题。我们已将一些指令更改为 controllerAs: 'vm'。 在一种情况下, controllerAs: 'vm' 没有隔离的作用域(但在所有其他情况下, controllerAs: 'vm' 指令确实有一个隔离的作用域)。 将 scope: {}, 添加到一个没有独立作用域的 controllerAs: 'vm' 指令解决了这个问题。

此页面是否有帮助?
0 / 5 - 0 等级