【发布时间】:2015-10-11 03:19:25
【问题描述】:
我有一个父状态,其中包含两个子状态,我将根据 URL 显示一个状态。
在这两个states 中,一个必须使用param1 和param2 之类的参数,我在状态定义中使用了ui-router 的params 选项。
州
$stateProvider.state('tabs.account', {
url: '/account',
views: {
'content@tabs': {
templateUrl: 'account.html',
controller: function($scope, $stateParams) {
//This params are internally used to make ajax and show some data.
$scope.param1 = $stateParams.param1;
$scope.param2 = $stateParams.param2;
},
}
},
params: {
param1: { value: null }, //this are optional param
param2: { value: null } //because they are not used in url
}
});
如果您查看我的路线,URL 中并没有真正引入 params 选项,这就是为什么我认为 then 是可选的。
问题
看看 plunkr,我展示了两个标签 Account 和 Survey,
- 单击“调查”选项卡,然后在
textarea中添加一些数据,如图所示。 点击Go to Account,将
textarea值传递给 另一个帐户标签,在锚点上执行ui-sref="tabs.account({param1: thing1, param2: thing2})"现在您将在 html 上看到
param1和param2值,这些值已分配给$stateParams的范围- 现在再次点击调查标签,您将进入调查页面。
- 点击浏览器返回,你会发现
param的值没有得到null。
相信你已经明白我要问的了,为什么没有存储可选参数值?因为他们一直是国家的一部分。
我知道我可以通过以下两种解决方案来解决这个问题。
- 通过创建一项将在两个视图之间共享数据的服务。
- 通过在状态 URL 中添加参数。喜欢
url: '/account/:param1/:param2',(但我不喜欢这个)
我已经尝试过 angular-ui-routers sticky states 但这似乎对我不起作用。有什么更好的方法?
有什么方法可以让我的用例正常工作,任何想法都会不胜感激。
Github Issue Link Here
【问题讨论】:
-
刚刚发现这个github.com/angular-ui/ui-router/issues/1158关于“通知”属性可以设置为假以防止事件(例如重新加载控制器)但它实际上不起作用(错误)。
-
@Okazari 感谢您的评论..我也需要关注这个问题:(
-
您是否考虑过使用查询参数而不是 url 参数?它可能有效,并且在 url ('/url/route?param1=value¶m2=value') 中不会那么奇怪
-
@Okazari 谢谢你的建议,但我不想那样做..它基本上和我在这里做的一样
-
@downvoter 请在您投反对票时发表评论。有问题吗?
标签: javascript angularjs angular-ui-router angular-ui angularjs-routing