0

我看到angularjs强烈建议不要做任何DOM操作的控制器, 只设置范围的状态,例如,从AJAX等提取数据,

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

怎么样指令控制器与分离的范围 是否有意义设置在隔离范围的功能做DOM操作

例如

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

指令是用于dom操作的。 – phylax

+0

@phylax我知道什么是指令,问题是如果添加方法到孤立的范围做dom操作是好的做法 – joelkaufman

+0

你想从你的指令控制器中导出一个dom操纵函数从你的控制器调用吗? – phylax

回答

0

我会尽力回答与把功能在directive的“私有”变量:

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

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

这一切都取决于该功能需要做什么以及何时应该被调用。

大部分我把controllerlink函数放在一个私有变量中,所以return { … }变得最小。对于功能而言,通常无关紧要。此外,如果功能shouzld作为API导出。

1

通常我会尝试将指令逻辑分成纯逻辑,它进入控制器,并进入链接函数的dom操作逻辑。

在我需要将范围操作的方法放在指令链接函数中声明这些函数的情况下。

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

在我的整个逻辑是dom操作的情况下,我不需要暴露api给其他指令(通过require),我根本没有控制器,只有链接。