我使用ui-router在AngularJS应用中动态构建状态。
给定像这样的状态数组(例如):
const dynamicStates = [
{name: 'alpha', template: '123'},
{name: 'bravo', template: '234'}
];
然后像这样构建状态(例如):
const states = [];
dynamicStates.forEach(state =>
states.push(
state: state.name,
resolve: {
templateDetails: ['Service', (Service) =>
Service.getTemplate(state.template)
.then(response => response)
]
}
)
})
states.forEach(states => $stateProvider.state(state));
state.template,在resolve函数中总是' 123'。我确定这是一个关闭问题,但我无法确切了解解决方案的工作原理(实际返回的是什么),因此无法弄清楚如何关闭我的state.template周围的范围。
有什么想法吗?感谢。
答案 0 :(得分:1)
好的,我找到了解决方案。
在每个解析中,我创建了另一个调用closureAroundTemplateId的函数,并返回模板ID值。然后将其传递给下一个解析函数,该函数实际获取模板详细信息。
我做了这个(如上所示,示例代码):
function closureAroundTemplateId (type) {
return function(){
return type['template'];
}
}
const states = [];
dynamicStates.forEach(state =>
states.push(
state: state.name,
resolve: {
templateId: closureAroundFormTemplateId(state),
templateDetails: ['Service', 'templateId', (Service, templateId) =>
Service.getTemplate(templateId)
.then(response => response)
]
)
})
states.forEach(states => $stateProvider.state(state));