将UI-Router状态参数从父级传递到子级

时间:2015-06-23 22:54:36

标签: angularjs nested angular-ui-router state params

我有以下UI-Router状态定义(为简洁起见,仅限于适用的方面):

 .state('ep.perma', {
    url: '/:permalink',
    params: {permalink: ''}, //default
    templateUrl: 'views/conference/home.html',
    controller: 'HomeCtrl'
  })

  .state('ep.perma.login', {
    url:'/login',
    templateUrl: 'views/dialogs/login.html',
    controller: 'LoginCtrl',
  })

  .state('ep.perma.register', {
    url: '/register',
    templateUrl: 'views/dialogs/register.html',
    controller: 'RegisterCtrl'
  })

父ep.perma状态中的:permalink参数可以是任何东西,但让我们说它是'acb123'。每个登录和注册状态都有一个sref链接,可以在其html中切换到其他状态。如果你最初作为url转到父ep.perma状态,一切正常。您可以在登录和整天注册之间切换,并且:permalink参数将保持不变。

但是,如果您通过URL导航到登录或注册状态... / acb123 / login或... / abc123 / register最初一切正常。但是,如果你然后尝试从登录切换到注册或反过来(取决于你去的第一个URL)点击html中的SREF链接,:永久链接参数丢失。所以,我在... / abc123 / login,在logins html中注册的sref应该是... / abc123 / register,但是//注册。这是在任何一个URL的初始加载,但不是在那个html sref直接转到另一个。

只有通过URL直接登录或注册子状态才会发生这种情况。如果我去父母ep.perma URL ... / abc123最初一切都很好。

对于为什么会发生这种情况和/或如何解决此问题的任何想法?在发布之前我发现在这里挖掘我可以通过来自父级的解析传递param(s)然后在子节点中使用它们,但是如果不直接访问则不想结束... / abc123 / abc123 / login通过网址。我也不是100%明确如何在子状态下设置它们(仅根据示例中的控制器here

我需要用户能够通过直接URL登录或注册,并在具有初始指定的时间之间切换:永久链接参数保持不变,如果直接作为初始URL直接转到父级。

TIA

1 个答案:

答案 0 :(得分:3)

想要帮助,给出一些想法,所以有a working plunkr。关键是,它按原样运行。您甚至可以导航到直接网址(在地址栏中),它仍然有效:

http://run.plnkr.co/plunks/rQRG6ZpXLWADX9md1YV5/#/bara/register

这些链接也可以使用:

@Transactional

检查here并尝试比较代码中的不同之处。或者让它破碎......继续它并修复它。