javascript - 如何将函数从 Controller 连接到指令

标签 javascript angularjs

我有一个需要在自定义指令上运行的函数。我无法让函数传递到具有隔离范围的指令。

这是我想要传递的函数:

    function isGreaterThanStartDate() {
      console.log('function run');
    }

这是指令:

    am.directive('mtzDatePicker', [
      () => {
        return {
          replace: true,
          restrict: 'AE',
          templateUrl: 'feature/share/directives/datepicker.html',
          scope: {
            fixPosition: '=',
            name: '@',
            minDate: '=',
            mode: '@',
            blur: '&',
            ngChange: '&',
            ngModel: '=',
            placeholder: '@',
            readonly: '=',
            required: '='
          },
          link(scope) {
            scope.showWeeks = false;

            // Fix the model.
    const model = scope.ngModel;
    if (model instanceof Date) {
      model.setHours(0);
      model.setMinutes(0);
      model.setSeconds(0);
      model.setMilliseconds(0);
    }

    scope.changed = () => scope.ngChange();

    scope.popupOpen = false;

    scope.openDatePicker = event => {
      // Hide all the date pickers, in case any were already visible.
      $('.date-picker > .dropdown-menu').hide();

      // Prevent the click event that trigger this from bubbling.
      event.preventDefault();
      event.stopPropagation();

      scope.popupOpen = true;
    };
  }
};

和 html:

    <div class="form-group">
    <label for="program-end-date" class="control-label">
      {{::'Promotion End Date' | L10n}}
    </label>
    <div mtz-date-picker name="endDate"
      ng-model="data.program.endDate"
      blur="isGreaterThanStartDate()"
      min-date="data.program.startDate">
      <!--readonly="data.readonly">-->
    </div>
    <div class="small">
      {{::'program-end-date-meaning' | L10n}}
    </div>
  </div

最后是该指令的 html:

    <div class="form-group">
    <label for="program-end-date" class="control-label">
      {{::'Promotion End Date' | L10n}}
    </label>
    <div mtz-date-picker name="endDate"
      ng-model="data.program.endDate"
      blur="isGreaterThanStartDate()"
      min-date="data.program.startDate">
      <!--readonly="data.readonly">-->
    </div>
    <div class="small">
      {{::'program-end-date-meaning' | L10n}}
    </div>
  </div

最佳答案

如果函数isGreaterThanStartDate在 Controller 中没有太多的依赖性,我认为最好将其放入service中,该服务用于在不同的服务器之间共享函数地点。

关于javascript - 如何将函数从 Controller 连接到指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36698355/

相关文章:

javascript - AngularJS 过滤器功能解释

angularjs - 使用 AngularJS 时执行 `Object.assign` 的安全方法是什么?

javascript - JSfiddle 上的 Angular 示例

javascript - 还有另一个 JSON -> HTML 表线程

javascript - Angular 2 Html 选择模型与选项值不匹配

javascript - 查找当前数组项的同级

angularjs - 在将行推送到表之前检查该行是否已存在

javascript - 如何定位在 fancybox 中打开的表单的输入

javascript - 按类别选择所有复选框,类别递增

jquery - 如何在 jQuery 中检索复选框值?