使用bindToController

时间:2015-08-05 08:00:57

标签: angularjs angularjs-directive

我是新(angular 1.3+)控制器和bindToController语法的忠实粉丝。现在我基本上试图删除我的指令中的所有链接函数。但是如何将所需的控制器输入我的指令控制器?

一个有效的解决方案是:

require : "ngModel",
scope : true,
bindToController : true,
link : function(scope, elem, attr, ngModelCtrl) {
    scope.ngModel = ngModelCtrl;
},
controller : function(..., $scope) {
    this.ngModel = $scope.ngModel;
}

我发现这非常难看,特别是因为我需要再次重新引入范围和链接功能。有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我的方式需要指令控制器

app.directive('psiLbUploadGallery', function() {
  return {
    restrict: 'E',
    template: galleryTpl,
    require: ['psiLbUploadGallery', 'ngModel'],
    scope: {},
    controller: controller,
    controllerAs: 'PsiLbUploadCtrl',
    bindToController: {
      uploadUrl: '='
    },
    link: function(scope, el, attrs, controllers) {
      let PsiLbUploadCtrl = controllers[0];
      let ngModelCtrl = controllers[1];

      PsiLbUploadCtrl.ngModel = ngModelCtrl;
    }
  };
});

导出默认类PsiLbUploadCtrl {

  constructor() {
    setTimeout(() => {
      console.log(this.ngModel);
    });
  }
}