2015-05-14 169 views
0

举个例子,我有下面的类:打字稿泛型 - 扩展类

module app.components.base { 
    export class BaseController<S extends IAppScope, A> { 
     public data:string; 

     constructor(public $scope: S, public service: A, public $state: ng.ui.IStateService, public $ionicHistory) { 
      console.log('Base Controller Loaded!'); 
      console.log($scope); 
      $scope.vm = this; 
     } 
    } 
} 

然后,我有这个单独的类:

module app.components.properties { 

    export class PropertiesController extends base.BaseController<IPropertiesScope, app.services.PropertyService> { 

    } 
} 

所以,在我看来,这说的”属性控制器扩展了基本控制器,因此属性控制器应具有this.$scopethis.$scope应为IPropertiesScope,因为通用类型S继承了IPropertiesScope接口。

但是,$scope未在我的基类的构造函数中定义。为什么这个值是未定义的?

回答

1

$ scope在我的基类的构造函数中是未定义的。为什么这个值是未定义的?

这是因为angular的默认依赖注入的作用方式。即使你知道构造函数的参数TypeScript知道构造函数的参数,所有的角度将看到的是in code

function PropertiesController() { 
    _super.apply(this, arguments); 
} 

你可以看到,打字稿将通过thorugh参数就好了,但是角度会看到PropertiesController()不依赖注入任何东西

修复:有明确的构造函数

或者对类的明确static $inject成员https://www.youtube.com/watch?v=WdtVn_8K17E