Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
DCloud
uni-app
提交
45070c09
U
uni-app
项目概览
DCloud
/
uni-app
4 个月 前同步成功
通知
731
Star
38707
Fork
3642
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
7
列表
看板
标记
里程碑
合并请求
1
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
7
Issue
7
列表
看板
标记
里程碑
合并请求
1
合并请求
1
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
45070c09
编写于
5月 08, 2020
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(v3): add navigator lock
上级
c9677d39
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
40 addition
and
2 deletion
+40
-2
src/core/helpers/api.js
src/core/helpers/api.js
+25
-2
src/core/helpers/protocol/route/route.js
src/core/helpers/protocol/route/route.js
+15
-0
未找到文件。
src/core/helpers/api.js
浏览文件 @
45070c09
...
...
@@ -20,7 +20,9 @@ import validateParam from './params'
function
invokeCallbackHandlerFail
(
err
,
apiName
,
callbackId
)
{
const
errMsg
=
`
${
apiName
}
:fail
${
err
}
`
console
.
error
(
errMsg
)
if
(
process
.
env
.
NODE_ENV
!==
'
production
'
)
{
console
.
error
(
errMsg
)
}
if
(
callbackId
===
-
1
)
{
throw
new
Error
(
errMsg
)
}
...
...
@@ -38,6 +40,23 @@ const callbackApiParamTypes = [{
required
:
true
}]
// 目前已用到的仅这三个
// 完整的可能包含:
// beforeValidate,
// beforeSuccess,
// afterSuccess,
// beforeFail,
// afterFail,
// beforeCancel,
// afterCancel,
// beforeAll,
// afterAll
const
IGNORE_KEYS
=
[
'
beforeValidate
'
,
'
beforeAll
'
,
'
beforeSuccess
'
]
function
validateParams
(
apiName
,
paramsData
,
callbackId
)
{
let
paramTypes
=
protocol
[
apiName
]
if
(
!
paramTypes
&&
isCallbackApi
(
apiName
))
{
...
...
@@ -67,7 +86,7 @@ function validateParams (apiName, paramsData, callbackId) {
const
keys
=
Object
.
keys
(
paramTypes
)
for
(
let
i
=
0
;
i
<
keys
.
length
;
i
++
)
{
if
(
keys
[
i
]
===
'
beforeValidate
'
)
{
if
(
IGNORE_KEYS
.
indexOf
(
keys
[
i
])
!==
-
1
)
{
continue
}
const
err
=
validateParam
(
keys
[
i
],
paramTypes
,
paramsData
)
...
...
@@ -149,6 +168,7 @@ function createApiCallback (apiName, params = {}, extras = {}) {
afterFail
,
beforeCancel
,
afterCancel
,
beforeAll
,
afterAll
}
=
wrapperCallbacks
...
...
@@ -172,6 +192,8 @@ function createApiCallback (apiName, params = {}, extras = {}) {
res
.
errMsg
=
apiName
+
'
:fail
'
+
errDetail
}
isFn
(
beforeAll
)
&&
beforeAll
(
res
)
const
errMsg
=
res
.
errMsg
if
(
errMsg
.
indexOf
(
apiName
+
'
:ok
'
)
===
0
)
{
...
...
@@ -255,6 +277,7 @@ export function wrapperUnimplemented (name) {
function
wrapperExtras
(
name
,
extras
)
{
const
protocolOptions
=
protocol
[
name
]
if
(
protocolOptions
)
{
isFn
(
protocolOptions
.
beforeAll
)
&&
(
extras
.
beforeAll
=
protocolOptions
.
beforeAll
)
isFn
(
protocolOptions
.
beforeSuccess
)
&&
(
extras
.
beforeSuccess
=
protocolOptions
.
beforeSuccess
)
}
}
...
...
src/core/helpers/protocol/route/route.js
浏览文件 @
45070c09
...
...
@@ -72,15 +72,30 @@ function createValidator (type) {
// 参数格式化
params
.
url
=
encodeQueryString
(
url
)
// 主要拦截目标为用户快速点击时触发的多次跳转,该情况,通常前后 url 是一样的
if
(
navigatorLock
===
url
)
{
return
`
${
navigatorLock
}
locked`
}
// 至少 onLaunch 之后,再启用lock逻辑(onLaunch之前可能开发者手动调用路由API,来提前跳转)
// enableNavigatorLock 临时开关(不对外开放),避免该功能上线后,有部分情况异常,可以让开发者临时关闭 lock 功能
if
(
__uniConfig
.
ready
&&
__uniConfig
.
enableNavigatorLock
!==
false
)
{
navigatorLock
=
url
}
}
}
let
navigatorLock
function
createProtocol
(
type
,
extras
=
{})
{
return
Object
.
assign
({
url
:
{
type
:
String
,
required
:
true
,
validator
:
createValidator
(
type
)
},
beforeAll
()
{
navigatorLock
=
''
}
},
extras
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录