当前位置: 首页 > 面试题库 >

AngularJS服务中的DOM操作

东门航
2023-03-14
问题内容

众所周知,使用AngularJS时必须在指令内操作DOM元素。

但是,在某些用例中,在服务内部操作DOM似乎是可以接受的。Misko
Hevery在这里谈论这个。您还可以在Bootstrap
UI对话框中
找到示例。

Misko的解释很模糊,所以我想知道如何确定何时需要将DOM放入服务而不是指令中。


问题答案:

指令及其定义方式始终附加在DOM节点上。因此,当您定义指令时,它会“扩展”或替换其所连接的DOM节点。

在某些情况下(例如对话框),您将无法将DOM节点附加到任何特定的父节点。在这些情况下,使用服务是有道理的,并且控制器仍可以保留在DOM位之外,因为DOM操作将封装在服务中。

弹出窗口可能是我们可能使用服务的另一种情况,但是与对话框不同,弹出窗口IS附加到DOM节点。因此,即使那只是一个灰色区域。

因此,一个基本而简单的测试是:“可以将这部分DOM操作代码附加到DOM节点吗?” 如果是,则执行指令。如果否,则服务。

对话框和自定义确认框是使用服务的典型示例。



 类似资料:
  • 问题内容: 当我使用jQuery执行DOM操作(添加新HTML)时,AngularJS不会自动检测新HTML中的变量并将其替换为它们的值。例如: 这是一个简单的例子,但在元素更改HTML(此功能被称为后),输出它仍然不是什么 行 应该在上下文/范围的意思。 问题答案: 您必须注入(http://docs.angularjs.org/api/ng.$compile)并使用它,以便对新html 有所了

  • 我试图编写一个HTML不安全的指令,它只是直接为元素的innerHTML分配一个值: 所以现在在我的模板中,我有类似的内容 这是可行的,但我不确定这是正确的方法,而setTimeout似乎是一个奇怪的变通方法。如果没有setTimeout,实际上并不引用DOM元素,而是引用某种临时元素。

  • 问题内容: 在遍历数据后,我遇到一些有关DOM操作的问题。 我们有一个与数据绑定并且可以正常工作的jQuery滑块插件,但是当使用时,我们必须将其初始化包装起来以使其起作用—现在甚至不起作用。 我认为使用是不可靠的,这将导致错误的修复。在jQuery中,我可以使用-这很可靠,但是使用似乎也不起作用。 调用了Slider指令,但由于没有将图像加载到DOM中而无法获得滑块中图像的高度-导致滑块的计算高

  • 问题内容: AngularJS在其文档中明确指出“服务是单例”: 违反直觉,也返回一个Singleton实例。 鉴于非单例服务有很多用例,实现工厂方法以返回Service实例的最佳方法是什么,以便每次声明依赖项时,它的另一个实例都可以满足? 问题答案: 我认为我们不应该让工厂返回一个有能力的函数,因为这会开始破坏依赖注入,并且该库的行为会很尴尬,尤其是对于第三方。简而言之,我不确定非单项服务是否有

  • 问题内容: 是否可以在angularJS中将一个服务注入到另一个服务中? 问题答案: 是。遵循angularjs中的常规注入规则。 感谢@simon。最好使用数组注入以避免最小化问题。

  • 服务是一种由服务器端带到客户端的特性,它由来已久。AngularJS应用中的服务是一些用依赖注入捆绑在一起的可替换的对象。服务是最常和依赖注入一起用的,它也是AngularJS中的关键特性。