Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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 AngularJS依赖项注入在模块中失败_Javascript_Angularjs_Dependency Injection_Typescript - Fatal编程技术网

Javascript AngularJS依赖项注入在模块中失败

Javascript AngularJS依赖项注入在模块中失败,javascript,angularjs,dependency-injection,typescript,Javascript,Angularjs,Dependency Injection,Typescript,我有一个关于角度依赖注入机制的问题。 我在一个独立的模块中编写了一个指令,它在数据表上完成了一些整洁的事情。我使用的是TypeScript,我的指令如下所示: export class MdListControls implements angular.IDirective { public templateUrl = "/app/templates/mdListControls.html"; public static instance(): any { return new

我有一个关于角度依赖注入机制的问题。 我在一个独立的模块中编写了一个指令,它在数据表上完成了一些整洁的事情。我使用的是TypeScript,我的指令如下所示:

export class MdListControls implements angular.IDirective {
  public templateUrl = "/app/templates/mdListControls.html";
  public static instance(): any {
    return new MdListControls();
  };

  public restrict = 'E';
  public transclude = true;
  public replace = true;
  public scope = {
    grid: '=',
  };
  public controller = "mdListControlsController"
  public controllerAs = "vm";

  public link = function (scope: angular.IScope, element: angular.IAugmentedJQuery, attrs: angular.IAttributes) {

  };
}
angular.module("base.directives.mdListControls", [])
  .controller("mdListControlsController", MdListControlsController)
  .directive("mdListControls", function () { return MdListControls.instance() });
我的控制器看起来像这样:

export class MdListControlsController { 
  static $inject = ['scope']
  constructor($scope: angular.IScope){
    //Setup the constructor
  }
  //Here goes the controller Logic
}
我正在一个新模块上注册指令和控制器,如下所示:

export class MdListControls implements angular.IDirective {
  public templateUrl = "/app/templates/mdListControls.html";
  public static instance(): any {
    return new MdListControls();
  };

  public restrict = 'E';
  public transclude = true;
  public replace = true;
  public scope = {
    grid: '=',
  };
  public controller = "mdListControlsController"
  public controllerAs = "vm";

  public link = function (scope: angular.IScope, element: angular.IAugmentedJQuery, attrs: angular.IAttributes) {

  };
}
angular.module("base.directives.mdListControls", [])
  .controller("mdListControlsController", MdListControlsController)
  .directive("mdListControls", function () { return MdListControls.instance() });
但是,一旦我运行应用程序,一旦加载指令,我就会出现以下错误:

Argument 'mdListControlsController;' is not a function, got undefined
这在一开始看起来并不是依赖注入的问题。但是当我在应用程序本身上注册控制器时(注入“base.directions.mdListControls”模块),就像这样

一切正常,控制器被正确地注入指令

有人知道我做错了什么吗?
谢谢你的帮助

在MdListControls类中,尝试提供控制器类,而不是控制器名称

...    
public scope = {
    grid: '=',
  };
public controller = MdListControlsController
public controllerAs = "vm";
...

我不知道TypeScript,但问题是JS执行的顺序。当您的控制器注册为angular.module(“base.directives.mdListControls”,[]).controller(“mdlistcontrolscocontroller”,mdlistcontrolscocontroller)时,mdlistcontroller不可用。我也不知道类型脚本。如果在控制器声明中执行.controller(“mdListControlsController”,function(){return mdListControlsController}),会发生什么?这可能是个愚蠢的问题。但您似乎导出了MdListControlsController。您是否也在指令模块文件的顶部导入它?@DaanvanHulst:MdListControls和MdListControlsController类都位于同一个typescript命名空间中,因此我不需要导入它。谢谢您的提示。这显然是可行的,因为“注入”发生在TypeScript级别。但是现在angular在这里根本没有依赖注入。然而,我想我不得不采用这个解决方案。