“最佳实践”在这里是模糊的。如果它是可读的并且有效,那么你就在那里,IMO,它可能很好。
也就是说,“角度方式”是将 DOM 操作排除在控制器之外,并使用依赖注入来确保一切都是可测试的。显然,您上面说明的方式很难测试,并且在控制器中放置了一些 DOM 操作。
我想我要从控制器中获取 DOM 操作是使用指令:
一个简单的指令,用于将您的对话框打开调用绑定到对元素的单击:
app.directive('openDialog', function(){
return {
restrict: 'A',
link: function(scope, elem, attr, ctrl) {
var dialogId = '#' + attr.openDialog;
elem.bind('click', function(e) {
$(dialogId).dialog('open');
});
}
};
});
在标记中,它将像这样使用:
<button open-dialog="modal-to-open">Open Dialog</button>
现在,这显然是非常基本的。如果您愿意,您可以使用它来获得相当先进的功能,为对话框中的不同选项添加额外的属性。
你可以更进一步,添加一个为你打开对话框的服务,这样你就可以将它注入你的控制器甚至你的指令中,并以这种方式调用。例如:
app.factory('dialogService', [function() {
return {
open: function(elementId) {
$(elementId).dialog('open');
}
};
}]);
在这里它正在使用中。这似乎很愚蠢,因为它本质上是一样的。但这主要是因为这是一个非常简单的例子。但它至少利用了 DI 并且是可测试的。
app.controller('MyCtrl', function($scope, dialogService) {
$scope.open = function () {
dialogService.open('#modal-to-open');
};
});
无论如何。我希望所有这些都可以帮助您决定要走的路。有一千种方法可以做到这一点。“正确”的方式是任何可行的方法,允许您做任何您需要做的事情(测试或其他任何事情),并且易于维护。