1

访问$ stateParams在我的角度的应用程序,我有这样的路线结构:角UI路由器:在重载

.state('mapping', { 
    url: '/mapping', 
    templateUrl: 'app/components/mapping/mapping.html', 
    controller: 'MapCtrl as map', 
    abstract: true, 
    authenticate: true 
}) 
.state('mapping.all', { 
    url: '', 
    templateUrl: 'app/components/mapping/partials/all.html', 
    authenticate: true 
}) 
.state('mapping.project', { 
    url: '/:projectName', 
    controller: 'ProjectCtrl as proj', 
    templateUrl: 'app/components/mapping/partials/project.html', 
    authenticate: true 
}) 

预期的功能,当用户访问'mapping.project'的应用程序将加载所有相关的相关信息通过$stateParams该项目使用projectID变量被传递(不可见)使用ui-sref

ui-sref="mapping.project({projectId: project.id, projectName: project.name})" 

然而这会导致不必要的行为:当用户重新加载页面WHE n已经在'mapping.project'状态,因为没有$stateParams被有效地传递,所以什么都不会被加载。

重新加载projectId的最佳方式是什么(确保我的控制器重新启动),而不在URL上显示它?

回答

1

在这种情况下,如果我们希望我们的参数能够在页面重新加载(或在新的标签页/窗口中打开)中生存,他们只需必须成为URL的一部分。因此,要做到这一点的方法是将URL定义与projectId扩展:

.state('mapping.project', { 
    url: '/:projectName?projectId', 
    ... 
}) 

,将添加projectId为“查询字符串参数”。另一种选择是PARAMS筑巢

.state('mapping.project', { 
    url: '/:projectName/:projectId', 
    ... 
}) 

检查也这样的:How to pass parameters using ui-sref in ui-router to controller

+0

我不知道,我想传递$ stateParams如预​​期无形会工作。谢谢! – Tiago

+1

它根本不能,因为它是通过我们的SPA内部的Javascript传递参数。重新加载或在新窗口中打开===只保留网址部分 –