为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用UI路由器将对象传递到状态?

/ 猿问

如何使用UI路由器将对象传递到状态?

呼唤远方 2019-10-08 14:42:09

我希望能够使用ui-router转换为状态并传递任意对象。


我知道通常$stateParams会使用该值,但是我相信此值会插入URL中,并且我不希望用户能够为该数据添加书签。


我想做这样的事情。


$state.transitionTo('newState', {myObj: {foo: 'bar'}});


function myCtrl($stateParams) {

   console.log($stateParams.myObj); // -> {foo: 'bar'}

};

有没有办法在不将值编码到URL的情况下执行此操作?


查看完整描述

3 回答

?
侃侃尔雅

在0.2.13版中,您应该可以将对象传递到$ state.go,


$state.go('myState', {myParam: {some: 'thing'}})


$stateProvider.state('myState', {

                url: '/myState/{myParam:json}',

                params: {myParam: null}, ...

然后访问控制器中的参数。


$stateParams.myParam //should be {some: 'thing'}

myParam将不会显示在URL中。


资源:


请参阅christopherthielen的评论https://github.com/angular-ui/ui-router/issues/983,为方便起见,在此处复制:


christopherthielen:是的,现在应该在0.2.13中起作用。


.state('foo',{url:'/ foo /:param1?param2',params:{param3:null} // null为默认值});


$ state.go('foo',{param1:'bar',param2:'baz',param3:{id:35,name:'what'}});


现在,“ foo”中的$ stateParams是{param1:'bar',param2:'baz',param3:{id:35,name:'what'}}


网址是/ foo / bar?param2 = baz。


查看完整回答
反对 回复 2019-10-08
?
慕的地2183247

这个问题有两个部分


1)使用不会更改网址的参数(使用params属性):


$stateProvider

    .state('login', {

        params: [

            'toStateName',

            'toParamsJson'

        ],

        templateUrl: 'partials/login/Login.html'

    })

2)将对象作为参数传递:嗯,现在没有直接的方法,因为每个参数都转换为字符串(EDIT:从0.2.13开始,这不再成立-您可以直接使用对象),但是您可以通过自己创建字符串来解决它


toParamsJson = JSON.stringify(toStateParams);

然后在目标控制器中再次反序列化对象


originalParams = JSON.parse($stateParams.toParamsJson);


查看完整回答
反对 回复 2019-10-08
?
偶然的你

实际上,您可以执行此操作。


$state.go("state-name", {param-name: param-value}, {location: false, inherit: false});

这是有关state.go中选项的官方文档


在那里描述了所有内容,您可以看到这是完成的方法。


查看完整回答
反对 回复 2019-10-08

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信