我有一个带有constructor()和方法的Controller类。
static $inject = ['$stateParams', '$location', 'defectResource', 'entityProvider'];
constructor($stateParams: any, $location: any, defectResource: any, entityProvider: any) {
if (typeof $stateParams.defectid != 'undefined') {
this.defectid = $stateParams.defectid;
defectResource.defectByDefectId(this.defectid).then((data) => {
this.defect = data;
});
} else {
// create new Defect
this.defect = entityProvider.newDefect($stateParams.itemid);
}
}
postDefect($stateParams: any, $location: any, defectResource: any): void {
defectResource.postDefect(this.defect).then(function () {
$location.path('defects/' + $stateParams.itemid);
});
};
此代码正常,但我没有在构造函数中使用$location
。它仅用于postDefect()
mtehod。但我无法从构造函数参数中删除它,因为构造函数参数列表必须与$inject
列表相同。
有没有办法不将$location
传递给构造函数?
答案 0 :(得分:2)
您可以在postDefect()中跳过它,然后使用此。$ location代替。
你不应该在所有地方使用'any',从https://github.com/DefinitelyTyped/DefinitelyTyped获取所需的DefinitelyTyped文件 并将它们包含在您的项目中。
答案 1 :(得分:1)
但我无法从构造函数参数中删除它,因为构造函数参数列表必须与$ inject列表相同。有没有办法不将$ location传递给构造函数?
如果类需要它(因为函数需要它)...最好将它作为构造函数中的依赖项预先存在。
只是一件小事......使用public
将其存储在课堂中,例如:
constructor($stateParams: any, public $location: any, defectResource: any, entityProvider: any)
有没有办法不将$ location传递给构造函数?
在构造函数中获取$injector
而不是$location
,然后在实际需要时调用$injector.get('$location')
。警告:这会让您的代码更难以审核下一个人¯\_(ツ)_/¯