Javascript StateProvider动态生成模板url-关闭问题

Javascript StateProvider动态生成模板url-关闭问题,javascript,angularjs,closures,url-routing,Javascript,Angularjs,Closures,Url Routing,我通过枚举对象并为其中的每个值生成状态,从枚举对象生成url状态 现在,我需要结合路由参数和当前状态生成模板url,并寻找一个无法通过的闭包问题 这是我的代码: // Stages is the enum for (var stage in Stages) { $stateProvider.state(stage.toString(), { url: '/' + currStageStr + '/:param1', temp

我通过枚举对象并为其中的每个值生成状态,从枚举对象生成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);
            }
由于阶段来自外部范围,我在每次迭代-结束问题上都得到相同的值。

我在网上找不到任何东西可以给我一个不同的函数签名来动态生成一个模板url

我想做这样的事情:


我找到了解决方法,并创建了自己的范围,以避免关闭问题:

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
                });
        }
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
                });
        }