如何在Angular中正确实现DOM操作?

plo*_*don 6 javascript dom angularjs angularjs-directive

我最近被指派接管并清理已经完成并正在生产的Angular项目.这是我第一次使用Angular.

到目前为止我在Angular上读过的所有内容......

...似乎所有人都对Angular应用程序的架构说了同样的话.最值得注意的是:

控制器永远不应该进行DOM操作或保持DOM选择器; 这就是指令和使用ng-model的地方.

但是,我被分配的项目似乎完全忽略了这一点.例如,MenuController的摘录:

(function() {
  app.controller('MenuController', function($scope) {
    ...

    $scope.openMenu = function () {
        $('.off-canvas-wrap').addClass('offcanvas-overlap-right');
    };

    ...
  });
}());
Run Code Online (Sandbox Code Playgroud)

我应该将此代码(和许多其他代码)移动到指令吗?或者我应该遵循应用程序已经建立的模式并继续在控制器中进行DOM操作?

flu*_*lup 5

是.摆弄DOM的代码在角度控制器中没有业务,属于指令.

使用角度的另一个优点是可以使用许多好的现成指令.因此,如果你要重构一些东西,你可能想看看你是否可以通过使用其他人的指令加快速度.

这就是说,这听起来像是很多工作.您需要告知谁为此付费,并与他们讨论重构的利弊.