定义指令的参数类型

时间:2019-02-27 12:47:20

标签: javascript angularjs jsdoc ngdoc

如何在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 :(得分:0)

如果您查看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 Compiler的经验(它与JSDoc不同,也不是ngDoc):

scope的类型为{Object<string>}

在控制器的scope上运行$onInit之前,class参数的值不存在,因此它们在构造函数中必须为空。您可以提供这样的类型;

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

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

在此示例中,this.oneWayParameter = 'this is not a boolean';在Closure中引发错误,因为该属性需要一个布尔值,但是会找到一个字符串。