我可以将控制器注入到这个 Formly 选择框对象中吗?

Can I inject a controller into this Formly selectbox object?

本文关键字:选择 对象 Formly 控制器 注入 我可以      更新时间:2023-09-26

我正在使用Angular Formly库来生成表单。此库允许您使用 JSON 对象构建表单。我正在处理一个动态的父子下拉列表:

http://jsbin.com/fiqubibawi/edit?js,output

vm.formFields数组包含多个描述应如何构建输入字段的对象。这些对象中的每一个都包含一个controller对象。这正是它听起来的样子:一个 Angular 控制器。下面是一个示例对象:

{
    key: 'sport',
    type: 'select',
    templateOptions: {
      label: 'Sport',
      options: [],
      valueProp: 'id',
      labelProp: 'name',
    },
    controller: /* @ngInject */ function($scope, DataService) {
      $scope.to.loading = DataService.sports().then(function(response){
        $scope.to.options = response;
        return response;
      });
    }
  }

我的问题:我在服务器端(ASP.NET)生成这些对象,并使用 JSON 将它们发送到浏览器。这意味着我无法向此对象添加控制器功能。我宁愿拥有的:

{
    key: 'sport',
    type: 'select',
    templateOptions: {
      label: 'Sport',
      options: [],
      valueProp: 'id',
      labelProp: 'name',
    },
    controller: ['MyCoolController']      
    }
  }

在 Angular 或其他一些肮脏的 JavaScript hack 中有什么方法可以让这段代码工作吗?它必须是一个字符串,因为 JSON 规范不允许通过网络发送函数。

幸运的是,

您可以使用Angular的依赖注入。

只需声明一个新的控制器

app.controller('TestController', function($scope, DataService) {
  $scope.to.loading = DataService.sports().then(function(response){
    $scope.to.options = response;
      return response;
  });
});

然后您可以使用名称'TestController'进行注入(我已经更新了您的 jsbin 以反映这一点)

vm.formFields = [{
  key: 'sport',
  type: 'select',
  templateOptions: {
    label: 'Sport',
    options: [],
    valueProp: 'id',
    labelProp: 'name',
  },
  controller: 'TestController'
}, 
...
];