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),我根本沒有控制器,只有鏈接。