例如,我有以下课程:
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> {
}
}
所以,在我看来,这表示&#34;属性控制器扩展了基本控制器。因此,属性控制器应该具有this.$scope
,this.$scope
应该是IPropertiesScope
类型,因为泛型类型S
继承了IPropertiesScope
接口`。&#34;
但是,$scope
在我的基类的构造函数中是未定义的。为什么这个值未定义?
答案 0 :(得分:1)
$ scope在我的基类的构造函数中是未定义的。为什么这个值未定义?
这是因为角度的默认依赖注入工作方式。即使你知道构造函数参数和TypeScript
知道构造函数参数,所有角度都会看到in code:
function PropertiesController() {
_super.apply(this, arguments);
}
你可以看到TypeScript会很好地传递参数,但是angular会看到PropertiesController()
和而不是依赖注入任何东西。
修复:有一个显式的构造函数
或者在班级https://www.youtube.com/watch?v=WdtVn_8K17E
上有明确的static $inject
成员