加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – Angular ui路由器解析查询参数到布尔值

发布时间:2020-12-17 17:49:30 所属栏目:安全 来源:网络整理
导读:考虑具有查询参数的状态的这种情况.我想将它们声明为标志,以便我可以在控制器中获取并获取true,false或undefined $stateProvider.state('foo.bar',{ url: '/foobar?flag1flag2',templateUrl: 'foo/bar/template.tpl.html',controller: 'FooBarCtrl'});myModu
考虑具有查询参数的状态的这种情况.我想将它们声明为标志,以便我可以在控制器中获取并获取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?

});

一些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...

目前$stateParams只提供字符串.有没有让路由器解析params作为标志?这比在控制器中手动解析要优雅得多.

解决方法

您应该能够将bool用作类型

url: '/foobar?{flag1:bool}&{flag2:bool}',

但我们甚至可以使用我们的自定义类型(让我们称之为boolean):

app.config(['$urlMatcherFactoryProvider',function($urlMatcherFactory) {
  $urlMatcherFactory.type('boolean',{
 name : 'boolean',decode: function(val) { return val == true ? true : val == "true" ? true : false },encode: function(val) { return val ? 1 : 0; },equals: function(a,b) { return this.is(a) && a === b; },is: function(val) { return [true,false,1].indexOf(val) >= 0 },pattern: /bool|true|0|1/
})
}]);

url的状态def将是这样的:

url: '/foobar?{flag1:boolean}&{flag2:boolean}',

这应该工作:

<a ui-sref="foobar({ flag1: 0,flag2:true })">
<a ui-sref="foobar({ flag1: 1,flag2:false })">

这是plunker with example

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读