Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 更改控制器内的模型对象以操作DOM-angular js-最佳实践?_Angularjs_Dom_Angularjs Directive_Angularjs Controller - Fatal编程技术网

Angularjs 更改控制器内的模型对象以操作DOM-angular js-最佳实践?

Angularjs 更改控制器内的模型对象以操作DOM-angular js-最佳实践?,angularjs,dom,angularjs-directive,angularjs-controller,Angularjs,Dom,Angularjs Directive,Angularjs Controller,在阅读了下面的帖子并在angular js上工作了一段时间后,我有一个简单的问题 该职位: 关注点(发帖):

在阅读了下面的帖子并在angular js上工作了一段时间后,我有一个简单的问题

该职位:

关注点(发帖): 操纵DOM-控制器应仅包含业务逻辑。将任何表示逻辑放入控制器都会显著影响其可测试性。Angular在大多数情况下都具有数据绑定功能,并具有封装手动DOM操作的指令。


问题是:如果我有一个简单的angular应用程序,只要点击一个按钮,我就会调用控制器的一个函数。在这个函数中,我想做一些简单的业务逻辑,根据业务逻辑输出,我想隐藏/显示一个按钮

最好的方法是什么。

我目前的做法是: (这种做法是否违反了js领域的法律。这是否违反了测试?
请纠正我)

角度指南并没有说“不要使用控制器来操纵dom”,意思是您永远不应该因为控制器中的某些内容而更改dom,而是永远不应该在控制器中直接修改dom。不要使用document.getElementById,不要使用$(“#element”)等-永远不要与dom对话,让您的模型通过将模型绑定到dom来解决这个问题

当您发现自己处于一种需要使用jQuery在控制器中直接与dom对话的情况时,就应该查看指令了

我同意@tasseKATT,将重置按钮代码上的ng click代码移动到一个函数中——即使只是为了保持理智

编辑

这是可测试的吗?是的,这比将内容内联到HTML中或直接依赖/修改DOM更重要

在这种情况下,您需要测试的只是您的作用域函数完成了它们应该做的事情——并且相信Angular人员已经测试了它们的绑定按文档所述工作的事实。您不必测试ng click是否调用了您的函数,您必须测试当使用任何参数调用时,您的函数是否按照规范的要求执行

就内联编写或在document.ready等中编写这种类型的代码更容易而言,这只是习惯于有角度的做事方式的一部分。经过多年使用jQuery进行绑定后,肯定需要一些时间才能习惯。我认为用“旧”的方式做这件事更难


查看这个网站上关于角度测试的帖子——有关于测试控制器、指令、服务等的文章——对我来说真的很有帮助

你现在做的很好。您希望避免类似
if($scope.isAdmin)$('#password').show()这样的代码在控制器中。我会将重置按钮逻辑移动到控制器作用域中的一个函数中,以使其更易于测试,就像您使用checkLoginName时所做的那样。否则看起来不错。谢谢,但这不会像jquery那样降低可读性。我的意思是一些函数被调用,一些模型发生了变化(这是不可避免的),然后突然一些div/按钮消失了。我的意思是,我做这件事的方式是不是很好,忘记了这一点。。。几个问题。。1.这种改变模型并通过ng显示/ng隐藏/切换得到反映的方法——这是“可测试”还是“不可测试”(因为我担心这些“功能”会出现问题)将被调用,这将调用更多函数,从而导致某些dom元素被显示/隐藏-请注意:我担心的不是结果,而是测试能力)。。。。。2.我发现内联编写这些代码很容易,因为与将它们移动到函数相比,这增加了可读性。我应该改变这种做法吗?