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

时间:2014-05-19 09:59:02

标签: javascript angularjs closures url-routing

我通过枚举enum并为其中的每个值生成一个状态,从enum对象生成我的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);
            }

由于阶段来自外部范围,我在每次迭代时获得相同的值 - 结束问题。

我没有在网上找到任何可以为我提供动态生成模板网址的不同功能签名的内容。

我想做这样的事情:

templateUrl:function ($stateParams,stage) {
                     return getTemplateUrl($stateParams.param1, stage);
            }

1 个答案:

答案 0 :(得分:0)

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

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
                });
        }
相关问题