2015-05-14 172 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