【发布时间】:2014-05-09 16:03:23
【问题描述】:
在阅读下面的帖子并在 Angular js 上工作了一段时间后,我有一个简单的问题。
帖子:no dom manipulation from angular js controllers
关注点(来自帖子):不要使用控制器来
操作 DOM——控制器应该只包含业务逻辑。将任何表示逻辑放入控制器会显着影响其可测试性。 Angular 具有适用于大多数情况的数据绑定和封装手动 DOM 操作的指令。
问题:如果我有一个简单的 Angular 应用程序并单击按钮,我正在调用我的控制器的功能。在该功能中,我想做一些简单的业务逻辑,并根据该业务逻辑输出,我想隐藏/显示一个按钮。
最好的方法是什么。
我目前的做法是:PLUNKER EXAMPLE (这种做事方式是否违反了 Angular js 领域的法律。这是否反对测试? 请纠正我)
【问题讨论】:
-
你正在做的很好。您希望在控制器中避免使用
if ( $scope.isAdmin ) $('#password').show();之类的代码。 -
我会将重置按钮逻辑移动到控制器范围内的函数中,以使其更易于测试,就像您使用 checkLoginName 一样。否则看起来不错。
-
谢谢,但不会像 jquery 那样降低可读性。我的意思是一些函数被调用并且一些模型改变(这是不可避免的)然后突然一些 div /button 消失了。我的意思是,我的做法是否完美,忘记了这些疑虑
标签: angularjs dom angularjs-directive angularjs-controller