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 的网页的完整源代码?
我应该如何在 Angular ui-router 中创建 templateUrl 属性的路径?