超微蓝猫
超微蓝猫
  • 发布:2023-04-11 15:26
  • 更新:2024-08-13 21:25
  • 阅读:1578

【报Bug】支付宝引入支付宝学生验证插件,组件实例ref获取不到,

分类:uni-app

产品分类: uniapp/小程序/阿里

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows10

HBuilderX类型: Alpha

HBuilderX版本号: 3.7.12

第三方开发者工具版本号: 3.3.3

基础库版本号: 2.8.8

项目创建方式: HBuilderX

操作步骤:

<student-verify
ref="alipayStudentVerifyRef"
shopName=""
shopLink=""
shopLogo=""
onSuccess="verifySuccess"
/>
try{
console.log(this.$refs.alipayStudentVerifyRef);//调用为 undefined
this.$refs.saveRef.verify(); //报错
}catch{
console.log('组件失败')
}

预期结果:

this.$refs.alipayStudentVerifyRef.verify() ==》调用成功

实际结果:

this.$refs.alipayStudentVerifyRef指向外部包裹的plugin-wrapper实例

bug描述:

uniapp支付宝小程序引入支付宝学生验证插件,组件实例ref获取不到,外部包裹了一层plugin-wrapper动态组件,无法获取student-verify插件下的实例方法

2023-04-11 15:26 负责人:无 分享
已邀请:
Logic

Logic

嘿,看起来我解决了

<template>  
   <student-verify  
        :shopName="verifyInfo.shopName"  
        :shopLink="verifyInfo.shopLink"  
        :shopLogo="verifyInfo.shopLogo"  
        @ref="onStudentVerifyRef"  
        @success="onSuccess"  
    />  
</template>

直接@ref
编译出来后会变成:

<plugin-wrapper ...>  
    <student-verify onRef="{{'onRef'+'b144d2e6-1'}}" ...></student-verify>  
</plugin-wrapper>

有个onRef, 然后得自己写个node.js脚本,在编译完成后把这个onRef改成ref, 就能拿到原始实例了。

修改后:

<plugin-wrapper ...>  
    <student-verify ref="{{'onRef'+'b144d2e6-1'}}" ...></student-verify>  
</plugin-wrapper>
  • 到瑞米法

    确实拿到了,非常感谢

    2023-05-24 10:18

  • 码农羊咩咩

    请问大牛能留下详细解决的node吗,不知怎么修改编译后文件

    2023-06-01 14:58

  • 1***@qq.com

    回复 到瑞米法:大牛能给个解决示例不

    2023-06-29 15:42

  • 1***@qq.com

    改了,也没有拿到呀,要疯了

    2023-07-25 14:47

6***@qq.com

6***@qq.com

解决方案,在vue.config.js 写个webpack插件去处理编译后的代码文件

<student-verify  @ref="onStudentVerifyRef" />    

onStudentVerifyRef(ref) {  
      this.studentVerifyRef = ref;  
    }

在vue文件中,ref用 @ref 代替,onStudentVerifyRef 用来接受ref对象

vue.config.js

const fs = require('fs');  

class MyPlugin {  
  apply(compiler) {  
    compiler.hooks.done.tap('MyPlugin', (stats) => {  
      function studentVoucherCollectionActivity() {  
        const paths = [  
          `${__dirname}/dist/dev/mp-alipay/pages/student/index.axml`,  // dev环境编译后的文件路径  
          `${__dirname}/dist/build/mp-alipay/pages/student/index.axml`,  // build环境编译后的文件路径  
        ];  
        paths.forEach((path) => {  
          if (fs.existsSync(path)) {  
            let content = fs.readFileSync(path).toString();  
            content = content.replace('student-verify onRef=', 'student-verify ref='); // 此处重点,将onRef替换成了小程序的语法  
            fs.writeFileSync(path, content);  
          }  
        });  
      }  
      studentVoucherCollectionActivity();  
    });  
  }  
}  

module.exports = {  
  configureWebpack: {  
    plugins: [new MyPlugin()],  
  },  
};  
  • 1***@qq.com

    大佬,我按上面代码改了,看着代码确实被改到了,但是拿回来的还是不对呀

    2023-07-25 14:48

  • 6***@qq.com

    回复 1***@qq.com:

    <student-verify @ref="onStudentVerifyRef" />


    onStudentVerifyRef(ref) {

    this.studentVerifyRef = ref;

    }


    注意这部分

    2023-08-03 17:06

  • h***@163.com

    大佬,有没有遇到过,注册的 success 回调不执行的问题?

    2023-08-15 18:25

T奔跑的code

T奔跑的code

我也是支付宝的学生验证插件,遇到同样的问题

T奔跑的code

T奔跑的code

你好,学生插件ref获取不到实例的问题解决了么,我也遇到了,解决的话,辛苦更新下帖子

一只小轩晨

一只小轩晨

解决了吗

到瑞米法

到瑞米法

遇到同样问题,怎么解决

Logic

Logic

同问,顶上去

1***@qq.com

1***@qq.com

http://mddoss.dev.gzqylc.com/oss/mall/mine/stu.png

这个页面是直接用官方给的代码的

1***@qq.com

1***@qq.com

vue.config.js这个文件也是用上面给的代码
,我在支付宝编译器上看代码是被改到了的,但是await this.studentVerifyRef.verify();这里还是报错的

  • 到瑞米法

    vue页面注意@ref="onStudentVerifyRef"

    <student-verify @ref="onStudentVerifyRef" shopName="xxx小程序" shopLink="xxx" shopLogo="xxx"

    onSuccess="onSuccess"></student-verify>

    js页面

    onStudentVerifyRef(ref) {

    this.studentVerifyRef = ref;

    }

    编译后的页面中插件上onRef改成ref

    2023-08-22 09:43

  • 1***@163.com

    回复 到瑞米法: 插件上onRef已经该成ref 还是不行

    2023-08-22 13:34

  • 到瑞米法

    回复 1***@163.com: 真机预览呢?

    2023-08-22 15:31

  • 1***@163.com

    回复 到瑞米法: 换个方式 已解决

    2023-08-23 14:46

  • 7***@qq.com

    回复 1***@163.com: 怎么解决的能说一下吗

    2023-09-22 10:24

  • 7***@qq.com

    回复 1***@163.com: 改完之后还是拿不到verify方法

    2023-09-22 10:24

  • 7***@qq.com

    回复 到瑞米法: 改完之后还是拿不到verify方法

    2023-09-22 10:25

  • 蛋炒太阳

    回复 7***@qq.com: await this.studentVerifyRef.detail.__args__[0].verify()

    2023-12-20 13:38

Diligent_UI

Diligent_UI - 【插件开发】【专治疑难杂症】【多款插件已上架:https://ext.dcloud.net.cn/publisher?id=193663(微信搜索飘逸科技UI小程序直接体验)】【骗子请绕道】问题咨询请加QQ群:120594820,代表作灵感实用工具小程序

学生验证插件是做什么的啊,有没有网址学习一下

安心

安心

楼上大佬说的对

1:ref改为@ref

2:增加vue.config.js代码

3:重点是, await this.studentVerifyRef.detail.args[0].verify(),这样才能调起来弹窗

9***@qq.com

9***@qq.com

V3 版本的这方法行不通了

1***@qq.com

1***@qq.com - 码农

弹窗还是不出来

3***@qq.com

3***@qq.com

<refund @ref="handleRef"  
            orderId=""  
            oid=""  
            @Complete="onComplete"  
        ></refund>

不能放其它组件里面。。。
我放在 mescroll-body 里面试了半天不行。。。


图中路径和组件名字记得替换

  • d***@qq.com

    我也是用 支付宝 极速退款组件遇到这个问题,但是我配置之后编译没生效,能指导一下吗

    2024-08-14 10:25

要回复问题请先登录注册