我们使用 angular-ui-router.js v 0.2.18 + angular-ui-router.d.ts v 1.4.6(typescript v 1.8.36.0 )。
因此我们使用IStateProvider
配置从一个州到另一个州的导航
通常我们需要将一些状态参数从父状态传递到子状态。
配置:
.state(States.MeasureDetail, {
parent: States.OperatorView,
templateUrl: '/App/Business/Kanban/BuildAndCureKanban/Views/MeasureDetail.html',
controller: Controllers.MeasureDetailController,
controllerAs: 'measureDetailCtrl',
params:
{
machine: null,
material: null
}
})
在父亲控制器中:
this.$state.go(States.MeasureDetail, {
machine: this.currentMachine,
material: this.currentMaterial
});
在儿童控制器中:
constructor(
private buildAndCureService: Services.IBuildAndCureService,
private $state: ng.ui.IStateService,
private eventManager: _Common.Services.IEventManager){
this.machine = $state.params["machine"];
this.material = $state.params["material"];
}
问题
没有params属性和IStateParameterService接口都是强类型的:你可以通过密钥访问并获得任何类型。
params?: any;
interface IStateParamsService {
[key: string]: any;
}
这是一个弱点,在许多开发人员的大项目中,已经带来了运行时问题。
问题
我知道可以像the example in this post to add a typed field一样扩展IStateParameterService,但解决方案对于所有状态都是一次,而我需要一个解决方案来逐州添加类型字段。
如何将IStateParameterService扩展为:
interface IStateParamsService {
CustomParam<T>?: T;
}
?
感谢。
答案 0 :(得分:0)
这里没有必要全局扩展IStateParameterService
,因为它应该是本地的。
由于$stateParams
在{x}中为deprecated,因此将$state
用于迁移目的是合理的,因此直接扩展IStateService
而不是{{} 1}}:
IStateParameterService