我试图列出stateprovider中存在的所有URL(angularjs 1.2.26)。
给出下面的例子,(非常简化状态列表):
angular.module('app')
.config(function ($stateProvider) {
$stateProvider
.state('app.vendors', {
url: '/vendors',
templateUrl: 'app/vendor/list.html',
controller: 'Vendor.ListController as vm',
})
.state('app.vendor', {
url: '/vendor/{vendorId}',
templateUrl: 'app/vendor/details.html',
controller: 'Vendor.DetailsController as vm',
data: {
subnav: [
{ title: 'Details', icon: 'fa-align-left', state: 'app.vendor', permissions: 'get-vendor', exactStateOnly: true },
{ title: 'Sites', icon: 'fa-archive', state: 'app.vendor.sites', permissions: 'get-site' },
{ title: 'NCRs', icon: 'fa-copy', state: 'app.vendor.ncrs', permissions: 'get-vendor' }
],
requiredPermissions: ['get-vendor']
}
})
.state('app.vendor.sites', {
url: '/sites',
templateUrl: 'app/vendor/site/list.html',
controller: 'Vendor.Site.ListController as vm',
data: {
requiredPermissions: ['get-site']
}
})
.state('app.vendor.site', {
url: '/site/{siteId}',
templateUrl: 'app/vendor/site/details.html',
controller: 'Vendor.Site.DetailsController as vm',
data: {
requiredPermissions: ['get-site']
}
})
.state('app.vendor.ncrs', {
url: '/ncrs',
templateUrl: 'app/vendor/ncr/ncrList.html',
controller: 'Vendor.NCR.NCRListController as vm',
data: {
requiredPermissions: ['get-vendor']
}
});
});
访问特定供应商,您将使用州:
app.vendor({vendorId: 1})
访问其网站
app.vendor.site({vendorId: 1, siteId: 2})
如果我将$ state对象传递给控制器,我可以使用state.get()列出所有状态。
如果我列出它们,则网址只包含最后一部分(即配置中的内容,以及相对于其父节点的内容)。我可以使用$ state.href(' app.vendor.site')这将给我几乎整个网址,但是错过了参数。我试图在运行时找到一种方法来知道它需要什么或至少有多少参数。
我的目标是尝试为我们的Angular应用程序中的每个页面创建一个基本的冒烟测试,以确保它加载某些内容并且不会在控制台中出错。我不想手动维护带有参数的网址列表。 (我们所有的参数都是int ID所以我可以简单地使用" 1"在参数中测试网址。)
答案 0 :(得分:2)
州的私有部分包含params
和ownParams
个对象。您可以使用装饰器来访问这些内部变量。请参阅我之前关于使用装饰器公开整个内部状态对象的答案:UI-Router $state.$current wrapper for arbitary state
装饰州对象后,使用$$state()
功能检索私有部分。然后查询状态以获取其参数并生成href。
angular.forEach($state.get(), function(state) {
var paramKeys = state.$$state().params.$$keys();
var fakeStateParams = {};
angular.forEach(paramKeys, function(key) { fakeStateParams[key] = key; });
console.log($state.href(state, fakeStateParams));
});