- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
DOM 操作不应该在 AngularJS Controller 中执行是常识,但是很难找到为什么这是一件坏事。所有消息来源都说它很难测试,因为 Controller 应该用于指令之间的通信,但未能用代码说明为什么这是一件坏事。
根据我的理解,我认为 Controller 与指令不同,它不与任何特定的 HTML 相关联,因此 Controller 所做的所有 DOM 修改很可能会失败。这肯定会使开发和测试复杂化。
在子指令的链接函数之前执行的指令中的 Controller 也会失败,因为 Controller 可能不知道子指令的实际 HTML 是什么。链接在 Controller 函数之后执行,可能会修改 HTML 结构。
我希望我在这里说得通,如果有人能澄清为什么从 Controller 操纵 DOM 是一件坏事,也许一些代码示例或链接可以很好地解释它,那就太好了。
最佳答案
用代码示例更难证明他们的观点的原因是,这个原因不能真正用一个简短的代码片段来表示(对于 Stack Overflow 来说足够短)。这确实是一种可维护性预防措施。从长远来看,您希望能够独立地独立更改 Controller 和 View 背后的逻辑,因为否则耦合的 Controller 和 View 对往往会保持这种状态并在不破坏对方的情况下相互限制更改功能的能力。一旦您决定更改有关 View 的任何内容,您就有机会破坏您的 Controller 代码,甚至无需触及它。
随着时间的推移,测试会变得更容易,因为您拥有的测试越多,您就越希望事情更加模块化并且依赖于尽可能少的变量和参数。
同样,是维护插入了这一建议。上面列出的问题一开始可能还不错。但是想象一下,采用一个您不是从头开始构建的项目,并且了解将此应用程序保持在一起的 Controller 和 View 之间的耦合背后的所有复杂性。如果您的应用程序包含数千行代码,即使您从头开始构建它也不可能了解所有这些错综复杂的内容,该怎么办?
要更全面地了解为什么需要像您提到的那样的设计模式,您可以引用此 google search只要您愿意,它就会带您踏上一段旅程。为了大致了解为什么设计模式甚至存在以及为什么许多人最终一遍又一遍地提出同样的建议,您可以引用引入设计模式的催化剂之一,Christopher Alexander .他向我们展示了模式之所以如此,是因为它们运作良好,而且人们会重复行之有效的做法。
关于javascript - AngularJS - 为什么在 Controller 中操作 DOM 是一件坏事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29981419/
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
Polymer的light DOM和local DOM有什么区别?来自文档(1): The DOM that an element creates and manages is called its
当内容添加到网页时,我需要触发一个 Action 。更新可能具有不同的性质(例如 AJAX、延迟脚本、用户操作)并且不受我的控制。 我想使用 DOM 突变事件,但它们并非在所有浏览器中都可用。是否有为
我刚遇到一个有趣的情况,我有一个提交 放置在 内的 native 自定义元素的 Shadow DOM 内. Select #shadow-root ...
假设有一个滚动列表,当我插入一些新的 DOM 附加到当前 dom 时,它工作正常。上拉 但是如果我之前插入一些新的 DOM,新的 DOM 将在视口(viewport)中,而旧的 DOM 将被下推。下拉
在我的项目中实现 Shadow DOM 是否会使它们像 React 使用的虚拟 DOM 一样更快? 最佳答案 它们是不同用途的不同事物,因此比较性能没有意义。 虚拟 DOM 虚拟 DOM 旨在避免对
在我的页面内容上,我将多张卡片组织成网格 __________________ | ____ ____ | | | | | | | | | | | |
是否可以在浏览器中看到(调试)从 DOM 元素触发的自定义事件? 假设我想查看 Bootstrap Collapse 的哪个特定元素触发了 show.bs.collapse event ,我能以某种方
我正在生成用于客户端的 XPaths 服务器端,我很困惑为什么在 DOM 中找不到表路径(即 td 中的内容)。 事实证明,现代浏览器(至少是 Chrome 和 Firefox)插入了 tbody在文
是否可以检索文本节点的几何位置(即从父元素、页面等的顶部/左侧偏移量)? 最佳答案 不是直接的。 TextNode 没有用于测量视口(viewport)定位的原始 IE 偏移*(和类似的)扩展。 仅在
以下语句中的 DOM 元素的含义是什么? Statement #1 You can add multiple classes to a single DOM element. Statement #2
有没有办法让 firebug(或任何其他浏览器,或使用任何其他工具)阻止任何 dom 操作的发生?有时布局调试充满悬停事件的屏幕是不可能的,因为元素可能会消失,并且您看不到它们的复合布局。 最佳答案
我需要在html文档中搜索 text here 然后输出完整的节点路径(CSS或XPATH) 例如 html > body > div class ="something" > table > tr
这是我的一个页面的典型加载时间如何拆分为:- Domain Lookup 0 0 % Connect 134 .3% Request
我的 .on() 工作时遇到一些问题。我的网站是here . 如果你看看 www.eliteweb-creation.co.uk/dev/js/nav.js,我正在 mouseenter 和 mous
我是 Javascript 的新手,负责将我们产品的 UI 从 YUI2 迁移到 YUI3。看起来哪里都没有迁移指南,所以我现在正在浏览互联网帖子和 yui 文档。 在我的全局范围内,我临时添加了类似
我想和实习生一起测试一些 DOM 相关的东西,不需要特定的固定装置,只是一般的 DOM 东西,比如我改变了 Element.prototype。这是否需要通过本地 Selenium 服务器(或 sau
我是 HTML 和 HTML5 的初学者。 当我阅读以下内容时 link ,我找到了术语 DOM 和 DOM API。我通读了维基百科,但无法理解其背后的全部思想。 谁能给我解释一下: 文档对象模型
我有两个主要问题。 Object 之类的扩展是否算数? 什么是 DOM 包装? http://perfectionkills.com/whats-wrong-with-extending-the-do
对不起查询,原型(prototype),雅虎 YUI,道场在考虑小的时候不吸引我。我想要一个模块化的库,代码尽可能小,最多 20Kb [un compressed] 是我所期望的。应该提供 Dom 操
我是一名优秀的程序员,十分优秀!