Angular ui-router - 如何访问从父模板传递的嵌套命名视图中的参数?

Posted

技术标签:

【中文标题】Angular ui-router - 如何访问从父模板传递的嵌套命名视图中的参数?【英文标题】:Angular ui-router - how to access parameters in nested, named view, passed from the parent template? 【发布时间】:2014-02-01 14:01:30 【问题描述】:

您好,我正在尝试访问控制器“ViewWorklogCrtl”中的参数,同时使用 ui-router 并遇到困难。

基本上,我的父模板包含:

a(ui-sref="instance-ticket.worklog(id:ticket.testnum)") show

然后在页面下方:

section(ui-view="top-section")

然后在我的 app.js 中,简而言之包含客户端路由信息:

 $stateProvider
.state('instance-ticket', 
  url: '/ticket/:instanceID',
  templateUrl: 'partials/instance-ticket',
  controller: 'ViewTicketCrtl'
)
.state('instance-ticket.worklog', 
  views:
    'top-section':
      templateUrl:'/partials/ticket.worklog.jade',
      controller: 'ViewWorklogCrtl'
      
  
  )

模板加载工作正常,我找不到答案的问题是 - 如何访问通过 ui-sref 链接传递到 ViewWorkLogCtrl 和 ViewWorkLogCtrl 内的“testnum”...更好的方法?

非常感谢!!!

【问题讨论】:

按照你的建议会更简单,它开始变得复杂了 【参考方案1】:

instanceID被声明为参数,所以我们可以这样访问它

.controller('ViewWorklogCrtl',
    [       '$scope','$stateParams'
    function($scope , $stateParams )     
        // 
        $scope.instanceID = $stateParams.instanceID;
        ...

所有其他细节都可以在这里找到https://github.com/angular-ui/ui-router/wiki/URL-Routing

ui-sref的调用应该是这样的

<a ui-sref="instance-ticket.worklog( instanceID:ticket.testnum )" >..

扩展:

如果我们想获取两个参数,1) 来自父级的 instanceID 2) 来自当前的 testnum,我们必须像这样调整状态定义

.state('instance-ticket', 
  url: '/ticket/:instanceID',      // instanceID
  templateUrl: 'partials/instance-ticket',
  controller: 'ViewTicketCrtl'
)
.state('instance-ticket.worklog', 
  // new param defintion
  url: '/worklog/:testnum',         // testnum
  views:
    'top-section':
      templateUrl:'/partials/ticket.worklog.jade',
      controller: 'ViewWorklogCrtl'
      
  

还有ui-sref

<a ui-sref="instance-ticket.worklog( instanceID:1, ticket.testnum:2 )" >..

我们可以这样访问它:

.controller('ViewWorklogCrtl',
    [       '$scope','$stateParams'
    function($scope , $stateParams )     
        // 
        console.log($stateParams.instanceID)
        console.log($stateParams.testnum)
        ...

【讨论】:

感谢您的回复。不幸的是,获取 instanceID 是很清楚的,但在我的示例中,我需要在工作日志级别检索的值是“testnum”。当它被点击时: a(ui-sref="instance-ticket.worklog(id:ticket.testnum)") 它正在将部分加载到命名视图中,我需要检索那个“id”当前填充为 testnum 的值... 我已经用新版本的the ui-sref 电话更新了答案。我们必须使用与 url 中声明的相同的参数名称 instanceID,我希望 ticket 是一些 ng-repeat 的一个项目...这是我声明状态 href 的方式/参考。票据的 testunm 将被评估并作为 instanceID 传递到$stateParams 虽然不确定,如果你让它工作......所以我用其他方法扩展了答案。我们可以引入一个新参数testnum。在这里,父状态和子状态都声明了参数...我们可以在一次调用中传递它们...并通过$stateParams 访问它们 我认为可以做到!我想我有两个问题,没有完全理解 stateParams 是如何工作的,并且错误地试图将我的 url 属性放在视图中。您的回答极大地帮助我解决了这两个问题。现在看来我应该能够切换“testnum”(:worklogID)属性,因为实际上会有这些链接的列表。谢谢!【参考方案2】:

我写了一个自定义指令来解决这个问题。

<a my-sref="myStateVar">awesome link</a>

你可以从 Github 克隆它: https://github.com/JensEger/Angular-Directives/tree/master/ui-router-helper

【讨论】:

你读懂了我的想法!如同一位老板!!谢啦!也许不是这个问题的最佳答案,但这正是我一直在寻找的。​​span>

以上是关于Angular ui-router - 如何访问从父模板传递的嵌套命名视图中的参数?的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以查看使用 Angular UI-Router 的网页的完整源代码?

angularJs 之ui-router

我应该如何在 Angular ui-router 中创建 templateUrl 属性的路径?

angular ui-router:在解析中获取 toState 的 $state 信息

Angular - ui-router 获取先前的状态

使用 Angular ui-router 设置 URL 查询参数而不改变状态