weex页面跳转传值的优雅方式

weex使用navigator进行页面跳转,这种方式是使用的url传参,刚开始使用的时候一直都是用下面这种方法传值:

navigator.push({
   url: config.getWeexIp() + '/app/main.js?account=123456&name=jelly'
         })

url中?后面便是携带的参数,ccount=123456&name=jelly就是代表两个参数,一个account,一个name。
在跳转后的页面通过获取url地址,便可以得到这两个值。但和android不同的是,在ios系统中,是不支持中文的,也就是说如果url是'/app/main.js?account=123456&name=杰尼',便会获取不到name数据,所以在最开始拼接url时需要encodeURIComponent方法转码,在拿到数据后在使用decodeURIComponent方法解码拿到正确的数据。

上面这种方法在需要传递的数据较少时很方便,但是实际开发中,数据往往都是一个json对象,需要传递的参数也很多,这样一来,url的拼接往往会变得很繁琐,因为需要将json对象中的数据单独一个一个提取出来传递.例:
假如有一个json对象格式如下:

data:{
    account : 123456,
    name : 杰尼,
}

url就会变成:
'/app/main.js?account='+data.account+'&name='+ encodeURIComponent(data.name)
获取到url地址后需要执行下面两条语句拿到数据:
account=url.account
name=decodeURIComponent(url.name) //解码
这只是两条数据,如果数据有十条以上,代码会变得很冗余,出错概率也会变大。
在写项目《XXXX》时开始思考能不能和原生Android一样,将一整个对象打包传递。之后,我找到了两个函数方法:
JSON.stringify() //将对象转换为json字符串
JSON.parse() //将json字符串转换为对象
虽然url不支持拼接对象,但是支持字符串啊,所以我可以把url写成:
'/app/main.js?data='+JSON.stringify(data)
获取数据时:
data=JSON.parse(url.data)
传递数据时,把对象转成json字符串传过去,在第二个页面获取到json字符串后,再转成对象,这样就完成了对象的传递。
需要使用account数据时,可以直接充data对象中拿:data.account
这种方法,代码量很少,同时也可以减少出错的概率,因为去除了抽取对象数据进行传递的步骤,避免出现参数名编写错误等bug。
但是仅仅这样也还不行,因为对象转成的json字符串中也是有可能出现中文的,比如data.name这个数据。所以同样需要做转码解码处理,最终的url:
'/app/main.js?data='+encodeURIComponent(JSON.stringify(data))
获取对象数据:
data= decodeURIComponent(JSON.parse(url.data))
整个传参过程就这两行核心代码。

你可能感兴趣的:(weex页面跳转传值的优雅方式)