我希望能够转换到状态并使用ui-router传递任意对象.
我知道通常使用$ stateParams,但我相信这个值被插入到URL中,我不希望用户能够为这些数据添加书签.
我想做这样的事情.
$state.transitionTo('newState', {myObj: {foo: 'bar'}});
function myCtrl($stateParams) {
console.log($stateParams.myObj); // -> {foo: 'bar'}
};
Run Code Online (Sandbox Code Playgroud)
有没有办法在不将值编码到URL的情况下执行此操作?
我一直在尝试使用ui-router的param类型,似乎无法使它们正确.
$stateProvider.state({
name: 'home.foo',
url: '/foo/{isBar:bool}',
controller: function() { },
templateUrl: 'foo.html'
});
我的期望是我应该能够像这样过渡到那个州:
$state.go(home.foo, { isBar: false })
要么
ui-sref="home.foo({ isBar: false })"
但是在结果$ stateParams中你会看到isBar:true
看一下' bool'param类型的编写方式,我认为true/false应该在url上编码为0/1,但这不会发生.如果在$ state.go的params中使用0/1然后它工作并被解码为false/true但是为了进一步混淆问题,如果使用ui-sref则这不起作用.
希望这个掠夺者会更好地解释它.任何提示赞赏!
编辑:我使用bool param类型的目的是在$ stateParams中以布尔数据类型结束
考虑具有查询参数的状态的这种情况.我想将它们声明为标志,这样我就可以在控制器中获取并获取true,false或者undefined
$stateProvider.state('foo.bar', {
url: '/foobar?flag1&flag2',
templateUrl: 'foo/bar/template.tpl.html',
controller: 'FooBarCtrl'
});
myModule.controller('FooBarCtrl', function($stateParams){
$stateParams.flag1 <<--- is string but can it be of type bool?
$stateParams.flag2 <<--- is string but can it be of type bool?
});
Run Code Online (Sandbox Code Playgroud)
一些URL示例:
/foobar?flag1=true -->> should yield {flag1: true, flag2: undefined}
/foobar?flag2=false -->> should yield {flag1: undefined, flag2: false}
/foobar?flag1=false&flag2=true -->> should yield {flag1: false, flag2: true}
/foobar?flag1=1&flag2=0 -->> should yield {flag1: true, flag2: false}
etc...
Run Code Online (Sandbox Code Playgroud)
目前$ stateParams只提供字符串.有没有让路由器解析params作为标志?这比在控制器中手动解析要优雅得多.