2013-11-15 212 views
1

我有一个URL参数,我想在所有状态中存在。该参数是'asUser',它允许管理员以另一个用户的身份查看应用程序。我想:如何在角度ui路由器中使用继承参数?

$stateProvider 
    .state("root", { 
    params: ['asUser'] 
    }) 
    .state("root.login", { 
    url: "/login", 
    templateUrl: "/static/partials/login.html",   
    controller: 'LoginCtrl' 
    }) 
    ... 

但是,当我去到一个URL /login?asUser=123,我在控制台收到此错误:

Failed to instantiate module myApp due to: 
Missing required parameter 'asUser' in state 'root.login' 

反正有这样与ui.router全局参数,而不不得不在每个州都提及它,并将它传遍各处?

+0

您使用的是什么版本的ui路由器?我从来没有见过这样的状态参数,他们不这样做,在文档 – NicolasMoise

+1

哦,好吧,我得到你想要做的。这只是一个猜测,但我尝试将参数添加到“root.login”的URL中,例如/ login /:asUser – NicolasMoise

+0

谢谢,这使我走上了正确的轨道。 –

回答

2

我会做:

.state("root", { 
    url: '/?asUser' 
}) 

你仍然必须处理你自己的参数继承,但至少应该让该参数在所有有效的状态。

+0

谢谢,这似乎工作。我不确定为什么它的行为与'params:''asUser'不同'但是你的示例允许我不在所有子状态URL中重复参数。另外,我向这个根状态添加了'abstract:true'。 –

+0

“我不确定为什么它的行为与'params:['asUser']''有所不同 - 因为你没有阅读文档:https://github.com/angular-ui/ui-router/维基/快速参考#params –

+2

是的,我做到了。 :)在那个关于'params'的说法中,它是否表示行为与'url'中指定的参数不同?它只是说,你可以使用它作为替代,当不指定'url'时。 –