由于stage来自外部作用域,因此每次迭代都得到相同的值-闭包问题。
我通过枚举枚举并为其中的每个值生成状态,从枚举对象生成url状态。
现在我需要用一个路由参数和当前状态的组合来生成我的模板url,我寻找一个不能通过的闭包问题。
这是我的代码:
// Stages is the enum
for (var stage in Stages) {
$stateProvider.state(stage.toString(),
{
url: '/' + currStageStr + '/:param1',
templateUrl:function ($stateParams) {
return getTemplateUrl($stateParams.param1, stage);
},
resolve: { model: getStageModel },
controller: getController
});
}
我的问题在这部分:
templateUrl:function ($stateParams) {
return getTemplateUrl($stateParams.param1, stage);
}
由于stage来自外部作用域,因此每次迭代都得到相同的值-闭包问题。
我在网上找不到任何东西可以给我一个不同的函数签名来动态生成模板url。
我想做这样的事情:
templateUrl:function ($stateParams,stage) {
return getTemplateUrl($stateParams.param1, stage);
}
我已经找到了一个工作,并创建了自己的作用域来避免闭包问题:
for (var stage in Stages) {
generateStageObj($stateProvider,stage)
}
function generateStageObj($stateProvider, stage) {
return $stateProvider.state(stage.toString(),
{
url: '/' + currStageStr + '/:param1',
templateUrl: function ($stateParams) {
return getTemplateUrl($stateParams.param1, stage);
},
resolve: { model: getStageModel },
controller: getController
});
}