AngularJS服务中的DOM操作

Flo*_*n F 28 service dom angularjs angularjs-directive

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

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

Misko的解释相当含糊,所以我想知道你如何确定何时需要将DOM放在服务中而不是指令中.

gan*_*raj 27

指令及其定义方式始终附加到DOM节点.因此,当您定义指令时,它会"扩展"或替换它所附加的DOM节点.

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

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

因此,一个基本而简单的测试是,"这个DOM操作代码可以附加到DOM节点吗?" 如果是,则指示.如果没有,那么服务.

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