AngularJS - “特殊”案例中的指令与每个控制器代码

时间:2013-09-07 08:40:37

标签: javascript angularjs controller directive

我在这里有一个理论案例,好吧,对我来说是一个实际案例,这就是我现在所做的。

我有一个SPA,有很多部分(3个大气压),我有一个菜单,会经历不同的状态,我这样做是为了让整个网站都有流畅的感觉,菜单元素起初是一个小动画,更像这样:

  1. 菜单首先是一个动画,它在我的根模板上做了一些事情
  2. 菜单转换为一个动作按钮,您可以按此按钮进入实际主页(不完全,当您打开它或按某些按钮时它仍然有一些与它相关的整洁动作)
  3. 在主页上,菜单再次更改状态,因此它是正常的网站菜单。
  4. 我在所有页面上保持相同的元素,以使体验变得流畅。

    菜单更改了类,每个类都有动画层和可能的操作。

    在这种情况下,为菜单使用指令是否更好?

    我想知道的是,如果我用它做出一个指令,我可以用指令内控制器的命令改变它的状态吗?或者逻辑是否在指令中(例如,检测控制器是否处于活动状态并采取适当的措施?)

    我的印象是我在stackoverflow上关于我的这些问题提出了许多可能愚蠢的问题:),但我真的想做正确的事情,此刻我从每个控制器对菜单进行DOM操作不同的点击和其他事件,它的工作原理,但我认为它不能正常维护,我必须改变三个控制器中的东西(在这个阶段,可能以后会有更多)来改变外观和感觉。

    JSFiddle是不可能的,有很多代码。

1 个答案:

答案 0 :(得分:2)

指令可以与其父控制器共享状态,因此通信不是问题。如果你需要更多的解耦,你可以使用广播(尽管有很多争议的事实)。 但是我不会使用指令,除非你在不同的地方重用它或者通过分离它的逻辑你最终得到更易于管理/可读的代码。换句话说,我的指令往往与一个“关注点”有关,而不是很多小东西。在其他指令和transclude内容中有指令是很常见的。 我更喜欢在指令中做DOM的东西,你可以用compilelink很好地控制它,所以如果我有一个组件可以执行很多繁重的DOM(事件监听器,DOM操作)我倾向于在指令中移动代码。 我也喜欢在模板中弹出<my-foo-directive>标签并抽象/简化它们。