Q: 编译的时候不能直接抹平吗?
A:
1. 实际业务代码太灵活了,编译时的ast分析根本抹平不了差异// 你确实可以拍着胸脯说,你不会写这种代码
// 但是你控制不了别人不会写这种代码
const methods = "${conditon ? 'navigate' : 'redirect'}To"
Taro[methods].call(Taro, {})
2. 有的平台确实不支持一些api的功能,需要用运行时的代码抹平// 还是拿路由跳转做例子
Taro.navigateTo({
url: 'test?id=1',
events: {
// 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据
acceptDataFromOpenedPage: function(data) {
console.log(data)
},
someEvent: function(data) {
console.log(data)
}
...
},
success: function (res) {
// 通过eventChannel向被打开页面传送数据
res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'test' })
}
})
// 转到h5平台就是
location.href = 'test?id=1'
api里明明能支持events和success回调,你强行转成"location.href = 'test?id=1'",不觉得有问题吗?