Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
m0_68066342
uni-app
提交
be7e519a
U
uni-app
项目概览
m0_68066342
/
uni-app
与 Fork 源项目一致
Fork自
DCloud / uni-app
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
uni-app
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
be7e519a
编写于
12月 19, 2020
作者:
Q
qiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: 支付宝小程序组件支持 vue 事件监听方式(需启用 component2)question/110978
上级
ffbd6356
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
55 addition
and
6 deletion
+55
-6
packages/uni-template-compiler/__tests__/compiler-mp-alipay.spec.js
...ni-template-compiler/__tests__/compiler-mp-alipay.spec.js
+13
-4
packages/uni-template-compiler/lib/script/traverse/data/index.js
...s/uni-template-compiler/lib/script/traverse/data/index.js
+9
-1
src/platforms/mp-alipay/runtime/wrapper/util.js
src/platforms/mp-alipay/runtime/wrapper/util.js
+33
-1
未找到文件。
packages/uni-template-compiler/__tests__/compiler-mp-alipay.spec.js
浏览文件 @
be7e519a
const
compiler
=
require
(
'
../lib
'
)
function
assertCodegen
(
template
,
templateCode
,
renderCode
=
'
with(this){}
'
,
o
ptions
=
{})
{
const
res
=
compiler
.
compile
(
template
,
{
function
assertCodegen
(
template
,
templateCode
,
renderCode
=
'
with(this){}
'
,
mpOptions
=
{},
baseO
ptions
=
{})
{
const
res
=
compiler
.
compile
(
template
,
Object
.
assign
(
{
resourcePath
:
'
test.wxml
'
,
mp
:
Object
.
assign
({
minified
:
true
,
isTest
:
true
,
platform
:
'
mp-alipay
'
},
o
ptions
)
})
},
mpO
ptions
)
}
,
baseOptions
)
)
expect
(
res
.
template
).
toBe
(
templateCode
)
expect
(
res
.
render
).
toBe
(
renderCode
)
...
...
@@ -45,6 +45,15 @@ describe('mp:compiler-mp-alipay', () => {
'
<component1 v-for="item in items" :ref="c4"></component1>
'
,
'
<component1 vue-id="{{
\'
551070e6-1-
\'
+__i0__}}" ref="__r" data-ref-in-for="{{c4}}" a:for="{{items}}" a:for-item="item" a:for-index="__i0__" onVueInit="__l"></component1>
'
)
assertCodegen
(
'
<component1 @change="onChange">text</component1>
'
,
'
<component1 onChange="__e" vue-id="551070e6-1" data-event-opts="{{[[
\'
^change
\'
,[[
\'
onChange
\'
]]]]}}" data-com-type="wx" ref="__r" onVueInit="__l">text</component1>
'
,
undefined
,
undefined
,
{
wxComponents
:
{
component1
:
'
/mycomponents/component1
'
}
}
)
})
it
(
'
generate default slot
'
,
()
=>
{
assertCodegen
(
...
...
packages/uni-template-compiler/lib/script/traverse/data/index.js
浏览文件 @
be7e519a
...
...
@@ -44,6 +44,14 @@ module.exports = function traverseData (path, state, tagName) {
t
.
stringLiteral
(
'
wx
'
)
)
)
if
(
state
.
options
.
platform
.
name
===
'
mp-alipay
'
)
{
addAttrProperties
.
push
(
t
.
objectProperty
(
t
.
stringLiteral
(
'
ref
'
),
t
.
stringLiteral
(
'
__r
'
)
)
)
}
}
if
(
addAttrProperties
.
length
)
{
...
...
@@ -56,4 +64,4 @@ module.exports = function traverseData (path, state, tagName) {
)
}
}
}
}
src/platforms/mp-alipay/runtime/wrapper/util.js
浏览文件 @
be7e519a
...
...
@@ -112,6 +112,36 @@ export function handleRef (ref) {
if
(
!
ref
)
{
return
}
if
(
ref
.
props
[
'
data-com-type
'
]
===
'
wx
'
)
{
const
eventProps
=
{}
let
refProps
=
ref
.
props
// 初始化支付宝小程序组件事件
Object
.
keys
(
refProps
).
forEach
(
key
=>
{
const
handler
=
refProps
[
key
]
const
res
=
key
.
match
(
/^on
([
A-Z
])(\S
*
)
/
)
if
(
res
&&
typeof
handler
===
'
function
'
&&
handler
.
name
===
'
bound handleEvent
'
)
{
const
event
=
res
&&
(
res
[
1
].
toLowerCase
()
+
res
[
2
])
refProps
[
key
]
=
eventProps
[
key
]
=
function
()
{
const
props
=
Object
.
assign
({},
refProps
)
props
[
key
]
=
handler
// 由于支付宝事件可能包含多个参数,不使用微信小程序事件格式
delete
props
[
'
data-com-type
'
]
triggerEvent
.
bind
({
props
})(
event
,
{
__args__
:
[...
arguments
]
})
}
}
})
// 处理 props 重写
Object
.
defineProperty
(
ref
,
'
props
'
,
{
get
()
{
return
refProps
},
set
(
value
)
{
refProps
=
Object
.
assign
(
value
,
eventProps
)
}
})
}
const
refName
=
ref
.
props
[
'
data-ref
'
]
const
refInForName
=
ref
.
props
[
'
data-ref-in-for
'
]
if
(
refName
)
{
...
...
@@ -129,11 +159,13 @@ export function triggerEvent (type, detail, options) {
const
eventOpts
=
this
.
props
[
'
data-event-opts
'
]
const
eventParams
=
this
.
props
[
'
data-event-params
'
]
const
comType
=
this
.
props
[
'
data-com-type
'
]
const
target
=
{
dataset
:
{
eventOpts
,
eventParams
eventParams
,
comType
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录