在angularJS中操作DOM:最佳实践是什么?
在angularJS中操作DOM:最佳实践是什么?
我们正在使用AngularJS构建一个大型的Web应用程序。
我们在不同的情况下经常使用自定义指令。当涉及到DOM操作、绑定事件等时,我们通常会在自定义指令的link函数中定义操作DOM的函数,然后在控制器中调用它(我们在$scope中定义函数,以便给定的控制器可以访问它)。
我认为按照AngularJS的方式,对于每个函数都定义一个单独的自定义指令,并直接从模板中使用它可能是更好的做法。但在我们的情况下,我不知道这样做到什么程度会舒服。
我们已经有了很多自定义指令,那么按照我们现在的做法(在指令中定义操作DOM的函数,并从控制器中调用它),是不是不好呢?这样做是否有意义,还是就像我们在控制器中操作DOM一样?
对我们来说,这是一个关注分离的问题。我们从不在控制器中定义操作DOM的函数,只在指令中定义,但从控制器中调用它似乎不太对。这样做可以吗?
下面是一个示例,展示了我们的自定义指令的样子:
angular.module('exp', []).directive('customdirectiveExp', ['', function(){
// 编译期间运行
return {
name: 'customDirectiveExp',
controller: "ControllerExp",
controllerAs: "ctrl",
templateUrl: 'templateExp',
link: function($scope, iElm, iAttrs, controller) {
/* 当ControllerExp需要时,这些函数将从ControllerExp中调用。
函数可以做任何操作,如操作DOM,添加事件监听器...
*/
scope.manipulateDom1 = function(){
// 操作DOM
};
scope.manipulateDom2 = function(){
// 操作DOM
};
scope.manipulateDom3 = function(){
// 操作DOM
};
}
};
}]);