例如,我有以下课程:
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.$scope
,并且this.$scope
应该是类型,IPropertiesScope
因为泛型类型S
继承了IPropertiesScope
接口”。
但是,$scope
在我的基类的构造函数中未定义。为什么未定义此值?
$ scope在我的基类的构造函数中未定义。为什么未定义此值?
这是因为angular的默认依赖项注入的工作方式。即使您知道构造函数自变量并且TypeScript
知道构造函数自变量,但angular所能看到的全部都在代码中:
function PropertiesController() {
_super.apply(this, arguments);
}
您可以看到TypeScript可以很好地传递参数,但是angular可以看到PropertiesController()
并且不依赖注入任何东西。
修复:具有显式构造函数
或者static $inject
,在班级https://www.youtube.com/watch?v=WdtVn_8K17E上拥有明确的成员
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句