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

时间:2015-04-18 17:15:25

标签: javascript angularjs dom 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');
    };

    ...
  });
}());

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

2 个答案:

答案 0 :(得分:5)

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

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

那就是说,这听起来像是很多工作。你想告诉谁付钱,并讨论与他们重构的利弊。

答案 1 :(得分:2)

$scope.openMenu = function () {
        $scope.newClass = 'offcanvas-overlap-right';
    };

和部分

<div class="off-canvas-wrap" ng-class="newClass"></div>