angularjs指令控制器$ element

时间:2014-04-30 15:41:46

标签: javascript angularjs angularjs-directive angularjs-controller

我看到angularjs强烈建议不要在控制器中进行任何dom操作, 仅设置范围的状态,例如从ajax等中提取数据,

https://docs.angularjs.org/guide/controller

具有隔离范围的指令控制器怎么样? 将函数设置在隔离范围上进行dom操作是否有意义

示例

controller:function($scope,$element){
    $scope.editDom = function(){
        $element.someThing();
    }
}

2 个答案:

答案 0 :(得分:1)

通常我尝试将指令逻辑拆分为纯逻辑(进入控制器)和dom操作逻辑进入链接功能。

如果我需要在范围内放置对dom进行操作的方法,我会在指令链接函数中声明这些函数。

这是一些人为的逻辑分离,主要的驱动程序是编写单元测试,然后我可以轻松编写检查控制器的测试。

如果我的整个逻辑都是dom操作,并且我不需要将api暴露给其他指令(通过require)我根本没有控制器,只有链接。

答案 1 :(得分:0)

我会尝试将函数放在directive的'private'变量中:

angular.module('...', [])
  .directive('...', function () {
    var
    myDOMManipulations = function (…) {…};

    return {
      scope: {},
      controller: function ($scope) {
        myDOMManipulations(…);
      }
    };
  });

这完全取决于函数需要做什么以及何时应该调用它。

大多数情况下,我甚至将controllerlink函数放在私有变量中,以使return { … }变得最小。对于函数,它们定义的位置通常无关紧要。此外,如果函数shouzld被导出为API。