Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
20岁爱吃必胜客
uni-app
提交
f0c28745
U
uni-app
项目概览
20岁爱吃必胜客
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f0c28745
编写于
3月 25, 2020
作者:
fxy060608
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(v3): cid and nid
上级
5e3858b0
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
39 addition
and
30 deletion
+39
-30
src/platforms/app-plus/helpers/util.js
src/platforms/app-plus/helpers/util.js
+15
-0
src/platforms/app-plus/service/framework/plugins/data.js
src/platforms/app-plus/service/framework/plugins/data.js
+7
-10
src/platforms/app-plus/service/framework/plugins/vdom-sync.js
...platforms/app-plus/service/framework/plugins/vdom-sync.js
+4
-8
src/platforms/app-plus/view/framework/plugins/event.js
src/platforms/app-plus/view/framework/plugins/event.js
+6
-5
src/platforms/app-plus/view/framework/plugins/vdom-sync.js
src/platforms/app-plus/view/framework/plugins/vdom-sync.js
+7
-7
未找到文件。
src/platforms/app-plus/helpers/util.js
0 → 100644
浏览文件 @
f0c28745
export
function
generateId
(
vm
,
parent
)
{
if
(
!
vm
.
$parent
)
{
return
'
-1
'
}
const
vnode
=
vm
.
$vnode
const
context
=
vnode
.
context
// slot 内的组件,需要补充 context 的 id,否则可能与内部组件索引值一致,导致 id 冲突
if
(
context
&&
context
!==
parent
&&
context
.
_$id
)
{
if
(
process
.
env
.
NODE_ENV
!==
'
production
'
)
{
console
.
log
(
'
generateId:
'
+
context
.
_$id
+
'
;
'
+
parent
.
_$id
+
'
,
'
+
vnode
.
data
.
attrs
.
_i
)
}
return
context
.
_$id
+
'
;
'
+
parent
.
_$id
+
'
,
'
+
vnode
.
data
.
attrs
.
_i
}
return
parent
.
_$id
+
'
,
'
+
vnode
.
data
.
attrs
.
_i
}
src/platforms/app-plus/service/framework/plugins/data.js
浏览文件 @
f0c28745
...
...
@@ -21,7 +21,11 @@ import {
B_CLASS
,
B_STYLE
,
S_CLASS
}
from
'
../../constants
'
}
from
'
../../constants
'
import
{
generateId
}
from
'
../../../helpers/util
'
import
{
diff
...
...
@@ -57,10 +61,7 @@ export function initData (Vue) {
if
(
!
this
.
_$vd
)
{
return
}
// TODO 自定义组件中的 slot 数据采集是在组件内部,导致所在 context 中无法获取到差量数据
// 如何保证每个 vm 数据有变动,就加入 diff 中呢?
// 每次变化,可能触发多次 beforeUpdate,updated
// 子组件 updated 时,可能会增加父组件的 diffData,如 slot 等情况
diff
(
this
.
_$newData
,
this
.
_$data
,
this
.
_$vdUpdatedData
)
this
.
_$data
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
_$newData
))
// setTimeout 一下再 nextTick( 直接 nextTick 的话,会紧接着该 updated 做 flush,导致父组件 updated 数据被丢弃)
...
...
@@ -87,11 +88,7 @@ export function initData (Vue) {
this
.
_$vdomSync
=
new
VDomSync
(
this
.
$options
.
pageId
,
this
.
$options
.
pagePath
,
this
)
}
if
(
this
.
_$vd
)
{
if
(
!
this
.
$parent
)
{
this
.
_$id
=
'
-1
'
}
else
{
this
.
_$id
=
this
.
$parent
.
_$id
+
'
,
'
+
this
.
$vnode
.
data
.
attrs
.
_i
}
this
.
_$id
=
generateId
(
this
,
this
.
$parent
)
this
.
_$vd
.
addVm
(
this
)
this
.
_$vdMountedData
=
Object
.
create
(
null
)
this
.
_$setData
(
MOUNTED_DATA
,
this
.
_$vdMountedData
)
...
...
src/platforms/app-plus/service/framework/plugins/vdom-sync.js
浏览文件 @
f0c28745
...
...
@@ -153,16 +153,12 @@ export class VDomSync {
removeElement
(
elm
)
{
const
elmIndex
=
this
.
elements
.
indexOf
(
elm
)
if
(
elmIndex
===
-
1
)
{
return
console
.
error
(
`removeElement[
${
elm
.
cid
}
][
${
elm
.
nid
}
] not found`
)
}
this
.
elements
.
splice
(
elmIndex
,
1
)
}
removeElementByCid
(
cid
)
{
if
(
!
cid
)
{
if
(
process
.
env
.
NODE_ENV
!==
'
production
'
)
{
console
.
error
(
`removeElement[
${
elm
.
cid
}
][
${
elm
.
nid
}
] not found`
)
}
return
}
this
.
elements
=
this
.
elements
.
filter
(
elm
=>
elm
.
cid
!==
cid
)
this
.
elements
.
splice
(
elmIndex
,
1
)
}
push
(
type
,
cid
,
data
,
options
)
{
...
...
src/platforms/app-plus/view/framework/plugins/event.js
浏览文件 @
f0c28745
...
...
@@ -29,10 +29,11 @@ export function initEvent (Vue) {
}
const
$event
=
this
.
$handleEvent
(
$vueEvent
)
const
cid
=
this
.
_$id
// 当自定义组件根节点触发事件时,nid 始终为 0
const
currentTarget
=
$vueEvent
.
$origCurrentTarget
||
$vueEvent
.
currentTarget
const
nid
=
currentTarget
===
this
.
$el
?
0
:
$event
.
options
.
nid
const
cid
=
this
.
_$id
const
currentTarget
=
$vueEvent
.
$origCurrentTarget
||
$vueEvent
.
currentTarget
// 当自定义组件根节点触发事件时,nid 补充前缀,避免与组件内部 nid 冲突(根组件page不需要)
const
nid
=
((
currentTarget
===
this
.
$el
&&
this
.
mpType
!==
'
page
'
)
?
'
r-
'
:
''
)
+
$event
.
options
.
nid
if
(
typeof
nid
===
'
undefined
'
)
{
return
console
.
error
(
`[
${
cid
}
] nid not found`
)
}
...
...
@@ -42,7 +43,7 @@ export function initEvent (Vue) {
delete
$event
.
mp
delete
$event
.
preventDefault
delete
$event
.
stopPropagation
delete
$event
.
options
delete
$event
.
options
delete
$event
.
$origCurrentTarget
// 实时发送,延迟的话,会导致 touch 类事件被合并,影响实际业务逻辑,比如 touchstart 中修改变量为 true,touchend 修改为 false
vd
.
sendUIEvent
(
cid
,
nid
,
$event
)
...
...
src/platforms/app-plus/view/framework/plugins/vdom-sync.js
浏览文件 @
f0c28745
...
...
@@ -3,11 +3,15 @@ import {
UI_EVENT
}
from
'
../../../constants
'
function
findParentCid
(
vm
)
{
import
{
generateId
}
from
'
../../../helpers/util
'
function
findParent
(
vm
)
{
let
parent
=
vm
.
$parent
while
(
parent
)
{
if
(
parent
.
_$id
)
{
return
parent
.
_$id
return
parent
}
parent
=
parent
.
$parent
}
...
...
@@ -30,11 +34,7 @@ export class VDomSync {
}
initVm
(
vm
)
{
if
(
!
vm
.
$parent
)
{
vm
.
_$id
=
'
-1
'
}
else
{
vm
.
_$id
=
findParentCid
(
vm
)
+
'
,
'
+
vm
.
$vnode
.
data
.
attrs
.
_i
}
vm
.
_$id
=
generateId
(
vm
,
findParent
(
vm
))
let
vData
=
this
.
addBatchVData
[
vm
.
_$id
]
if
(
!
vData
)
{
console
.
error
(
'
cid unmatched
'
,
vm
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录