javascript - 链接函数和 Controller 函数如何共享 Angular Directive(指令)中的知识?

标签 javascript angularjs angularjs-directive

我有一个显示付款历史记录的 Angular Directive(指令)。默认情况下,它使用 vm.numberOfPaymentsToDisplay 变量显示最近 6 笔付款。如果您单击“查看更多”,则会增加 10。现在,当用户单击另一个部分时,链接函数中有一个监听器应该将数字重置为 6,但是 vm 未定义。

代码如下:

angular.module('nui.settings2.account')
 .directive('paymentHistory', function(){

 function PaymentHistoryController(paymentHistoryService, $filter, $window, $translate){

  const filter = $filter('formatCurrency');

  var vm = this;
  vm.payments = paymentHistoryService.get();
  vm.numberOfPaymentsToDisplay = 6;
  vm.getLastPayment = getLastPayment;
  vm.viewMorePayments = viewMorePayments;
  vm.title = $translate.instant('NUI.SETTINGS.PAYMENT_HISTORY');


  function getLastPayment(){
    const lastTransaction = paymentHistoryService.getLastPayment();
    return lastPaymentInfo = "amount (date)";
  }

  function viewMorePayments(){
    vm.numberOfPaymentsToDisplay = vm.numberOfPaymentsToDisplay + 10;
    return true;
  }
}

function link(scope, element, attrs, [expander, paymentHistory]){
  const containerEl = element.children();
  expander.registerContentContainer(containerEl);
  scope.$on(expander.COLLAPSE_EVENT, () => vm.numberOfPaymentsToDisplay = 6);
  scope.$on("$destroy", () => scope.$emit(expander.CONTAINER_DEREGISTER_EVENT));
  paymentHistory.cancel = () => expander.collapse();
}

return {
  restrict: 'E',
  templateUrl: 'nui/settings2/account/billing/payment-history.directive.html',
  controller: PaymentHistoryController,
  link: link,
  require: ['^^settingExpander', 'paymentHistory'],
  controllerAs: 'PaymentHistoryCtrl',
  bindToController: true
};
});

如何在链接函数中设置 vm.numberOfPaymentsToDisplay = 6,即使此知识只有 Controller 知道?

最佳答案

当您将 PaymentHistoryController 注入(inject)链接函数时,您可以向 PaymentHistoryController 添加一个方法,例如 setNumberOfPaymentsToDisplay,您可以像这样调用该方法:

paymentHistory.setNumberOfPaymentsToDisplay(6);

Controller 代码:

function PaymentHistoryController(paymentHistoryService, $filter, $window, $translate){

  const filter = $filter('formatCurrency');

  var vm = this;
  vm.payments = paymentHistoryService.get();
  vm.numberOfPaymentsToDisplay = 6;
  vm.getLastPayment = getLastPayment;
  vm.viewMorePayments = viewMorePayments;
  vm.setNumberOfPaymentsToDisplay = setNumberOfPaymentsToDisplay;
  vm.title = $translate.instant('NUI.SETTINGS.PAYMENT_HISTORY');


  function getLastPayment(){
    const lastTransaction = paymentHistoryService.getLastPayment();
    return lastPaymentInfo = "amount (date)";
  }

  function viewMorePayments(){
    vm.numberOfPaymentsToDisplay = vm.numberOfPaymentsToDisplay + 10;
    return true;
  }

  function setNumberOfPaymentsToDisplay(amount) {
     vm.numberOfPaymentsToDisplay = amount;
  }
}

链接代码:

function link(scope, element, attrs, [expander, paymentHistory]){
  const containerEl = element.children();
  expander.registerContentContainer(containerEl);
  scope.$on(expander.COLLAPSE_EVENT, () => paymentHistory.setNumberOfPaymentsToDisplay(6));
  scope.$on("$destroy", () => scope.$emit(expander.CONTAINER_DEREGISTER_EVENT));
  paymentHistory.cancel = () => expander.collapse();
}

关于javascript - 链接函数和 Controller 函数如何共享 Angular Directive(指令)中的知识?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43233117/

相关文章:

javascript - Angularjs 指令范围问题

javascript - 通过 jquery/javascript 将文本添加到 Twitter 分享 API

javascript - 在D3中,如何向geojson要素集合中的要素添加标签

javascript - 使用下划线 countBy 作为数组中对象的嵌套属性

javascript - 使用 Javascript 将 GeoJSON 转换为 SVG

javascript - 使用 ng-show 调用 Controller 函数两次

node.js - Angular 未定义

javascript - 提交表单时如何从多选中获取数组[AngularJS]

javascript - 为内部 html 创建具有 id 属性但 id 仍在外部 html 上的 angularjs 指令

javascript - 我可以在自定义 Angular 元素的 html 标记中传递 args 吗?