Является ли хорошей практикой иметь отдельное определение для контроллера при использовании директивы

#angularjs

#angularjs

Вопрос:

Я новичок в angular. И я экспериментировал с «директивами». При использовании директив я нашел следующие 2 способа использования контроллера с директивой.

Подход 1

 angular.module('folderSettingApp')
    .directive('templateRenderer', function () {
        return {
            // other options
            , controller: 'GridController'
        };
    });
  

Подход 2

 angular.module('folderSettingApp')
    .directive('templateRenderer', function () {
        return {
            // other options
            , controller: function ($scope, $attrs) {
               // add some functions here
            }
        };
    });
  

Я не уверен, какой подход использовать, когда любое предложение будет оценено.

Ответ №1:

Не так часто использовать какой из них, он основан на вашем использовании,

Например, если вы хотите использовать директиву несколько раз в своем приложении, лучше не определять какой-либо контроллер в своей директиве, например:

 .directive('exampleDirective', function (){
    return {
        restrict: "A", // OR E OR AE OR C
        template: "<div>YOUR TEMPLATE HERE</div>",
        link: function (scope, element, attributes) {
            // what ever function you want whould be here:
        }
    }
});
  

Но, как правило, ради модульности angular не рекомендуется определять контроллер в директивах.

Потому что цель директивы — использовать ее в нескольких контроллерах и нескольких представлениях.

Таким образом, определение контроллера в директиве просто делает эту директиву менее модульной при ограниченном использовании.

Ответ №2:

Один из аргументов в пользу отдельного контроллера — для простоты тестирования. Совсем не сложно писать тесты, которые создают экземпляры и позволяют тестировать отдельный код на отдельном контроллере.