钉钉dd.ready中不能调用方法解决,钉钉微应用遇到的坑

    技术2022-07-11  97

    钉钉dd.ready中不能调用方法解决

    获取微应用免登授权码

    官方代码:

    dd.ready(function() { dd.runtime.permission.requestAuthCode({ corpId: _config.corpId, // 企业id onSuccess: function (info) { code = info.code // 通过该免登授权码可以获取用户身份 }}); });

    code虽然拿到了,但是遇到问题是info.code无法抛出来使用,只能在里面继续访问后台。

    其中需要重新定义var axios = require('axios'),不然会报没有定义axios。

    例如:

    dd.ready(function () { dd.runtime.permission.requestAuthCode({ corpId: 'dingd05db47515f6499cbc961a6cb783455b', // 企业id onSuccess: function (info) { console.log("info.code获取没问题") var axios = require('axios') axios.post('/v1/GetUserDetail', { AppCode: info.code }).then(resp => { if (resp && resp.status == 200) { console.log("欢迎" + resp.data.name) }); } }) } }); });

     

    原因是

    在JSAPI官方文档中记录说,dd.ready命名空间中采用异步方式,在页面加载时候就先执行dd.ready命名空间中内容,以至于无法加载到页面中其他方法。

    解决方法

    在获取到code后,访问后台拿到需要用到信息,通过传参数形式,跳转到其他页面解决。

    代码:

    var axios = require('axios') axios.post('/v1/GetUserDetail', { AppCode: info.code }).then(resp => { if (resp && resp.status == 200) { console.log("欢迎" + resp.data.name) var params_name = resp.data.name if (params_name == '') { params_name = '未获取姓名' } that.$router.push({ name: 'orderingAdd', params: { name: params_name } }); } })

     

     

    Processed: 0.010, SQL: 9