AngularJS - 为什么在控制器中操纵DOM是一件糟糕的事情?

14 浏览
0 Comments

AngularJS - 为什么在控制器中操纵DOM是一件糟糕的事情?

众所周知,在AngularJS控制器中不应进行DOM操作,但很难找到为什么这样做是不好的原因。所有的来源都说很难进行测试,因为控制器应该用于指令之间的通信,但是却没有用代码说明这是为什么不好。

根据我的理解,我认为控制器和指令不同,不与任何特定的HTML相关联,因此控制器进行的所有DOM修改很可能会失败。这肯定会使开发和测试变得复杂。

指令中的控制器在子指令的链接函数之前执行,这也可能失败,因为控制器可能不知道子指令的实际HTML是什么。链接在控制器函数之后执行,可能会修改HTML结构。

我希望我讲得清楚,如果有人可以澄清为什么从控制器操作DOM是不好的事情,或者提供一些解释得很好的代码示例或链接,那将是很好的。

0
0 Comments

AngularJS - 为什么在控制器中操纵DOM是一个坏习惯?

在AngularJS中,控制器主要用于处理业务逻辑,而不是操纵DOM。然而,在某些情况下,开发人员可能会在控制器中操纵DOM,这可能会导致一些问题。那么为什么在控制器中操纵DOM是一个坏习惯呢?以下是问题的原因和解决方法。

问题的原因:

1. 控制器的职责- 控制器的主要职责是处理业务逻辑,而不是操纵DOM。如果在控制器中进行DOM操作,会导致职责不清晰,使代码难以维护和测试。

2. 设计师的灵活性- 如果在控制器中操纵DOM,设计师将失去对HTML布局的控制权。设计师将不得不查找控制器代码来修改DOM操作,这限制了设计师的能力,并可能导致代码冗余和混乱。

解决方法:

1. 使用指令- AngularJS中的指令是用于操纵DOM的主要工具。通过使用指令,开发人员可以将DOM操作从控制器中分离出来,使代码更具可读性和可维护性。

2. 将DOM操作封装到指令中- 将DOM操作封装到指令中可以提高代码的重用性和可测试性。指令可以单独定义DOM操作,并在需要时进行调用,从而使代码更加模块化和可扩展。

将DOM操作从控制器中分离出来是一个好的做法。通过使用指令,开发人员可以更好地组织和管理代码,使其更具可读性和可维护性。这样做还可以提高设计师的灵活性,使其可以更好地控制HTML布局。因此,在开发AngularJS应用程序时,应尽量避免在控制器中操纵DOM。

0
0 Comments

AngularJS - 为什么在控制器中操作DOM是不好的?

在查看如下问题的内容时 "Thinking in AngularJS" if I have a jQuery background?,你会得到一些提示。

我认为DOM操作既不需要也不应该使用的最大原因之一是,Angular在处理DOM链接时使用了声明式方法,而不是直接DOM操作的命令式方法。其中一些答案详细解释了声明式方法和命令式方法之间的区别。

使用jQuery时,你逐步告诉DOM需要发生什么。而使用AngularJS时,你描述了想要的结果,而不是如何实现。查看这里了解更多信息。另外,还要查看Mark Rajcok的答案。

关于这个主题的更全面的讨论也可以在这里找到 What is the difference between declarative and imperative programming

通过这样的方法,控制器的实现变得简化了,当代码库规模增长和复杂性增加时,我们开始获得真正的价值。

0
0 Comments

AngularJS - 为什么在控制器中操作DOM是一个不好的事情?

在AngularJS中,控制器被用来管理与视图交互的逻辑。然而,有些开发者可能会尝试在控制器中直接操作DOM元素,这是一个不好的实践。以下是这个问题出现的原因以及解决方法。

原因:

1. 可维护性:在长期来看,我们希望能够独立地修改控制器和视图的逻辑,因为耦合的控制器和视图会相互限制,导致难以改变功能而不破坏另一方。一旦你决定改变视图的任何内容,你就有可能在不触碰控制器代码的情况下导致其破坏。

2. 测试性:随着测试的增多,我们希望事物更加模块化,并尽可能依赖少量的变量和参数,以便更容易进行测试。

解决方法:

1. 使用指令:AngularJS提供了指令(Directives)的机制,可以将DOM操作封装在指令中,从而将DOM操作和控制器逻辑分离。

2. 使用服务:将DOM操作封装在服务(Service)中,然后在控制器中注入该服务,以实现DOM操作的目的。

以上问题主要是出于维护性方面的考虑,尽量保持控制器和视图的独立性,避免耦合。对于设计模式的理解和应用也是非常重要的,因为设计模式是经过验证的最佳实践,可以提高代码的可维护性和可测试性。

参考链接:

1. [Google搜索:gang of four design patterns](https://www.google.com/search?sourceid=chrome-psyapi2&ion=1&espv=2&es_th=1&ie=UTF-8&q=gang%20of%20four%20design%20patterns&oq=gang%20of%20four&aqs=chrome.1.69i57j0l5.3198j0j7)

2. [Christopher Alexander的文章](http://www.slate.com/articles/arts/architecture/2009/12/do_you_see_a_pattern.html)

0