Как задокументировать фабрику, которая возвращает класс в angular с помощью ngdoc?

Учитывая угловое приложение с фабрикой, которая возвращает класс, как таковой:

angular.module('fooApp').factory('User', function(){
    function User(name){
        this.name = name;
    }

    User.prototype.greet = function(){
        return "Howdy, " + this.name;
    }

    return User;
});

С помощью ngdoc (особый вкус jsdoc использует), как мне документировать инициализатор, не определяя его как метод?

Сейчас я попробовал вот что:

/**
 * @ngdoc service
 * @name fooApp.User
 * @description User factory.
 */

angular.module('fooApp').factory('User', function(){

    /**
     * @ngdoc method
     * @methodOf fooApp.User
     * @name Initializer
     * @description Initializes a new User object with a name
     */
    function User(name){
        this.name = name;
    }

    User.prototype.greet = function(){
        return "Howdy, " + this.name;
    }

    return User;
});

Но это приводит к User инициализатор (User функция, которая принимает параметр name) обрабатываются как метод с именем Initializer, что смущает людей, пытающихся использовать этот код.

Я пытался добавить @constructor флаг, но это не влияет на HTML dgeni заканчивает генерировать.

Спасибо.


ОБНОВЛЕНИЕ: Удалены ссылки на dgeni, У меня сложилось впечатление, что используемый мной плагин ( grunt-ngdocs) использует dgeni за кадром, но это не так.

3 ответа

Вот как бы я это сделал, не имея опыта работы с Angular, в частности:

/**
 * @ngdoc service
 * @name fooApp.User
 * @description User factory.
 */

angular.module('fooApp').factory('User', function(){

    /**
     * @ngdoc method
     * @constructs fooApp.User
     * @description Initializes a new User object with a name
     */
    function User(name){
        this.name = name;
    }

    User.prototype.greet = function(){
        return "Howdy, " + this.name;
    }

    return User;
});

Это самоуверенный ответ.
У меня были проблемы с документацией Angular, и я даже написал блог об этом, Вздох, Документация AngularJS

Мой вывод заключался в создании нового. Angular-JSDOC является результатом.

Вот выдержки из github.

Радиально-JSDoc

Шаблон JSDoc 3 для AngularJS.
Плагин JSDoc и шаблон для AngularJS, больше ничего!

Характеристики

  • TOC справа, оглавление, для навигации по директивам, сервисам, контролерам и т. Д.
  • Читать и обрабатывать тег @ngdoc

Как это выглядит

Я создал запрос fork / pull для добавления поддержки @constructor в gulp-ngdocs, доступный в grunt-ngdocs: https://github.com/nikhilmodak/gulp-ngdocs/pull/91. Все, что нужно сделать, это изменить раздел основного использования, включив в него новое ключевое слово.

Затем используйте способ, аналогичный, но слегка отличающийся от ответа @SGD. Убедитесь, что директива @ngdoc в сервисе определяет функцию.

Пример:

/**
 * @ngdoc function
 * @name yourModule.yourService
 * @description
 *
 * Your short description
 *
 * @constructor
 * @param {string} yourConstructorParameter A string paramter
 * @returns {Object} An object instance of type YourClassName
 * 
 */       

angular
  .module('yourModule', [])
  .factory('YourClassName', function() {

    /**
     * @ngdoc object
     * @name yourModule.type:YourClassname
     * @description
     *
     * Short description.
     * 
     */

    function YourClassName(yourConstructorParameter) {
      this.yourConstructorParameter = yourConstructorParameter;
      this.yourMethod = function() {};
    }


  /**
   * @ngdoc function
   * @name yourModule.type:YourClassName#yourPrototypeMethod
   * @methodOf yourModule.type:YourClassName
   * @description
   *
   * Short Description.
   *    
   * @returns {Object} The object passed on instantiation.
   */

    YourClassName.prototype.yourPrototypeMethod = function() {
      return this.yourConstructorParameter;
    };

    return YourClassName;

  });
Другие вопросы по тегам