最近、DingTalk Bindeng に取り組んでいたのですが、npm 経由で dingtalk-jsapi をインストールした後、dd.ready() を実行しても効果がありませんでした。ただし、現在の環境が「notInDingTalk」であるかどうかを判断する場合には有効です。長い時間がかかりましたが、原因はわかりませんでした。その後、他の人のコードが私のコードと少し違うようだということを偶然発見したので、死んだ馬を生きた馬医として扱うつもりで試してみたところ、結果は非常に効果的でした。
さっそく説明すると、その理由は、公式 Web サイトからコピーしたコード内の匿名関数 function(){} が vue 開発では無効であり、this ' this を変更する前に arrow function () =>{} に変更する必要があるため
です
。 userCode ' は、dd.ready() が入力されたかどうかをテストするために一時的に変更されていますが、これらの詳細については心配する必要はありません。
通常であれば、this.userCode には「実行開始準備完了。DingTalk に入り、認証コードを正常に取得できます。」と表示されるはずですが、
実際には「実行開始準備完了。」と表示されるだけです。
変更後:
認証コードは最終的に期待どおりに表示されます。
コードを貼り付けます:
if (dd.env.platform !== "notInDingTalk") {
this.userCode += '开始执行ready ';
//进行钉钉登录操作
dd.ready(() => {
this.$Message.info('1')
this.userCode = '进入了钉钉 ';
dd.runtime.permission.requestAuthCode({
corpId: corpId, // 企业id
onSuccess: (info) => {
//todo: 测试获取授权码
this.userCode += " 获取授权码成功 ";
this.userCode += info.code // 通过该免登授权码可以获取用户身份
},
onFail: (error) => {
this.userCode += " 获取授权码失败 ";
console.log('好吧,问题不小')
this.$Message.error(JSON.stringify(error))
}
});
});