Определение типа параметра для директивы - PullRequest
0 голосов
/ 27 февраля 2019

Как определить типы параметров для директивы в angularjs?Какой тип использовать для & привязки?

См. Ngdoc или jsdoc в примере кода.

UPD: Моя цель - получить ответы на вопросы ниже

 * @param {<< what to write here? >>} parentContextExpression
 * @param {<< what to write here? >>} oneWayParameter

angular.module('app', [])
  .directive('exampleDir', exampleDir);

/**
 * @ngdoc directive
 * @module app
 * @name app.directive:exampleDir
 * @param {<< what to write here? >>} parentContextExpression
 * @param {<< what to write here? >>} oneWayParameter
 * @param {Object=} twoWayParameter
 * @usage
 * <example-dir
 *   parent-context-expression="externalFn()"
 *   one-way-parameter="parentScopeVariable"
 *   two-way-parameter="parentScopeObject"
 * ></example-dir>
 **/
function exampleDir() {
  return {
    template: '...',
    scope: {
      parentContextExpression: '&',
      oneWayParameter: '@',
      twoWayParameter: '="
    }
  }
}

1 Ответ

0 голосов
/ 28 февраля 2019

Если вы посмотрите на код Angular Material , вы увидите источник этого ответа.

Вот упрощенная версия, которая больше похожа на источник в вопросе.

/**
 * @ngdoc directive
 * @name exampleDir
 *
 * @param {string} one-way-parameter A One way.
 * @param {expression=} parent-context-expression An Expression
 */
function ExampleDir() {
  return {
    restrict: 'E',

    scope: {
      oneWayParameter: '@?oneWayParameter',
      parentContextExpression: '=?parentContextExpression'
    },
}

Согласно моему опыту работы с компилятором Closure (который не совпадает с JSDoc и не является ngDoc):

Тип scope равен {Object<string>}.

Значения параметров scope не существуют до тех пор, пока $onInit не будет запущен на контроллере class, поэтому они должны иметь значение NULL в конструкторе.Вы можете указать эти типы следующим образом:

class SomeCtrl {
  constructor() {
    /** @type {?boolean} */
    this.oneWayParameter;
  }

  $onInit() {
    this.oneWayParameter = 'this is not a boolean';
  }
}

В этом примере this.oneWayParameter = 'this is not a boolean'; выдает ошибку в Closure, поскольку свойство ожидает логическое значение, но находит строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...