无
- 发布:2024-05-15 10:22
- 更新:2024-12-18 15:43
- 阅读:430
产品分类: uniapp/小程序/阿里
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win10
HBuilderX类型: 正式
HBuilderX版本号: 4.15
第三方开发者工具版本号: 3.8.11
基础库版本号: 2.9.6
项目创建方式: HBuilderX
操作步骤:
预期结果:
拿到ref实例,可以调用start方法
拿到ref实例,可以调用start方法
实际结果:
ref实例无法获取,报错了
ref实例无法获取,报错了
bug描述:
在接入支付宝原生插件<极速退款插件>官方文档地址
发现无法按照文档方式获取实例 调用对应的方法.
这是文档中的示例代码
axml文件
<refund
orderId="2023122501502300000005550002476962"
oid="2088501698901229"
ref="handleRef"
onComplete="onComplete"
/>
对应的js文件
Page({
data: {
},
// 开始插件极速退款流程(点击退款按钮后调用)
handleRefund() {
this.refundRef.start();
},
// 获取插件实例
handleRef(ref) {
// 存储自定义组件实例,方便以后调用
this.refundRef = ref;
},
});
在对应写入uniapp时, handleRef方法并没有调用
在翻看支付宝文档时,发现支付宝为了保护插件, 这是文档, 将获取组件实例ref屏蔽了,导致无法直接获取组件的ref,也就无法调用上面的start()方法.
参考了别人的解决方案,我这边也暂时解决了,不够完美。讲一下我的步骤。
我用的支付宝的alipaySubscription这个插件,插件地址:https://opendocs.alipay.com/pre-open/0a67v1
官方要求
<industry-subscription
appId="当前小程序的 appId"
industryType="仅支持部分行业订阅,参考下文"
noUI
ref="handleRef"
/>
handleRef(ref) {
this.subscriptionRef = ref; // 存储自定义组件实例,方便以后调用
},
咱们改成
<industry-subscription
appId="当前小程序的 appId"
industryType="仅支持部分行业订阅,参考下文"
noUI
@ref="handleRef"
/>
编译后,找到用这个插件的那个页面的axml文件,看到如下插件引用的地方,
<plugin-wrapper vue-id="1bc44290-3" onPluginWrap="__w" data-event-opts="{{[['^ref',[['handleRef']]]]}}" data-com-type="wx" data-event-list="onRef" onRef="__e" onVueInit="__l" vue-slots="{{['default']}}">
<industry-subscription onRef="{{'onRef'+'1bc44290-3'}}" id="subscriptionRef" noUI="{{true}}" industryType="14" appId="xxxxxxxxxxxxxxx" onVueInit="__l"></industry-subscription>
</plugin-wrapper>
把其中的
onRef="{{'onRef'+'1bc44290-3'}}"
改成
ref="{{'onRef'+'1bc44290-3'}}"
随便保存直接在支付宝开发者工具编译。
还有个问题需要处理,就是调用插件里的方法。插件官方要求是这样
const res = await this.subscriptionRef.requestIndustrySubscription();
但是直接调用显示没有这个方法,所以直接打印一下this.subscriptionRef这里面是啥,这时候会发现,得这样调用
const res = await this.subscriptionRef.detail.__args__[0].requestIndustrySubscription();
1***@qq.com
你好,https://ask.dcloud.net.cn/question/167328,我看了下这个链接里面的内容呢,我的还是不行,具体怎么处理呢?
2024-06-14 14:59