Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以将控制器注入这个表单selectbox对象吗?_Javascript_Angularjs_Angular Formly - Fatal编程技术网

Javascript 我可以将控制器注入这个表单selectbox对象吗?

Javascript 我可以将控制器注入这个表单selectbox对象吗?,javascript,angularjs,angular-formly,Javascript,Angularjs,Angular Formly,我正在使用Angular Formly库生成表单。此库允许您使用JSON对象构建表单。我正在使用动态父子下拉列表: vm.formFields数组包含几个对象,这些对象描述了如何构建输入字段。这些对象中的每一个都包含一个控制器对象。这正是它听起来的样子:一个角度控制器。下面是一个示例对象: { key: 'sport', type: 'select', templateOptions: { label: 'Sport', options: [],

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

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

{
    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黑客中,是否有任何方法可以让代码正常工作?它是一个字符串,因为JSON规范不允许通过线路发送函数。

幸运的是,您能够使用Angular的依赖注入

只需声明一个新的控制器

app.controller('TestController', function($scope, DataService) {
  $scope.to.loading = DataService.sports().then(function(response){
    $scope.to.options = response;
      return response;
  });
});
然后您可以使用名称
'TestController'
进行注入(我已经更新了您的名称以反映这一点)


谢谢,很棒的东西。如果在Formy网站的文档中提到这一点,那就太好了。
vm.formFields = [{
  key: 'sport',
  type: 'select',
  templateOptions: {
    label: 'Sport',
    options: [],
    valueProp: 'id',
    labelProp: 'name',
  },
  controller: 'TestController'
}, 
...
];