WeChatアプレットのポップアップウィンドウにコンテンツが表示され、ワンクリックでテキストをコピーできます(wx.showModalおよびwx.setCLipboardData)

要件の説明

今日、WeChatアプレットで作業していたときに、開発要件に遭遇しました。簡単に言えば、ユーザーはボタンまたは特定の領域をクリックして、特定のテキストまたはファイルを表示し、テキストをコピーすることができます。

構想する

最初に行ったことは、クリックイベントを実装してから、ブール値checkFlagを変更して、このテキストを表示するかどうかを決定することでした。たとえば、「テキストの表示」をクリックすると、checkFlagがtrueになり、このテキストが特定の領域に表示されます。もう一度「テキストの表示」をクリックすると、checkFlagがfalseになり、テキストが非表示になります。

問題

これは私が最初に考えた最も愚かな方法ですが、後であまり美しくはなく、テキストの長さが不確かな場合、ページ全体のレイアウトも不確かであるため、ページ全体の全体的な効果もそれほどではありません"スマート"。

改善-ポップアップウィンドウwx.showModalおよびwx.setCLipboardDataを使用します

wx.showModal

まず、wx.showModalについて学び、アプレットのドキュメントを確認します。

wx.showModal({
    
    
  title: '提示',
  content: '这是一个模态弹窗',
  success (res) {
    
    
    if (res.confirm) {
    
    
      console.log('用户点击确定')
    } else if (res.cancel) {
    
    
      console.log('用户点击取消')
    }
  }
})

使用できるいくつかのパラメーターを要約します。

  1. タイトルはタイトルです
  2. contentはプロンプトコンテンツです
  3. showCancelは、キャンセルボタンを表示するかどうかを決定します
  4. ConfirmTextボタンのテキストを確認します
  5. object.sucessコールバック関数が属性confirmの場合は、ユーザーが[OK]をクリックしたことを意味します。キャンセルされた場合は、ユーザーが[キャンセル]をクリックしたことを意味します。

wx.setCLipboardData

複製されたAPIは非常に単純です。

wx.setClipboardData({
    
    
  data: 'data',
  success (res) {
    
    
    wx.getClipboardData({
    
    
      success (res) {
    
    
        console.log(res.data) // data
      }
    })
  }
})

と組み合わせて

checkTextDetailsは、クリックイベントbindtapの応答関数です。
wx.showModalのタイトルとコンテンツは、ユーザーにプロンプ​​トを表示したいタイトルとコンテンツです。
そして、OKボタンのテキストを「テキストをコピー」に変更しました。
コールバック関数が成功し、ユーザーが[OK]ボタンの[テキストのコピー]をクリックして戻って確認すると、wx.setCLipboardDataがさらに呼び出されます。

 checkTextDetails: function () {
    
    
    var that = this;
    wx.showModal({
    
    
      title: '作业说明',
      content: this.data.homeworkContent,
      showCancel: true,
      confirmText: '复制文本',
      success(res) {
    
    
        if (res.confirm) {
    
    
          wx.setClipboardData({
    
    
            data: that.data.homeworkContent,
            success(res) {
    
    
              wx.getClipboardData({
    
    
                success(res) {
    
    
                  console.log(res.data) // data
                }
              })
            }
          })
        }
      }
    })

  },
  

最終効果

checkTextDetails関数を呼び出すと、ポップアップウィンドウが表示され、プロンプトの内容とタイトルが示されます。
ここに画像の説明を挿入します
クリックしてテキストをコピーすると、コピーは成功し、コンソールはコピーされたテキストを出力します。
ここに画像の説明を挿入しますここに画像の説明を挿入します

予防

注:**上記のコードでは、var that = this; ** wx.setClipboardDataがwx.showModalの下でさらに呼び出されるため、このポイントを保存しました。
これを記述しない場合、つまり、var that = thisを削除すると、wx.setClipboardDataのデータは次の
ようになります。data:this.data.homeworkContent;など:

 checkTextDetails: function () {
    
    
    // var that = this;   //去掉
    wx.showModal({
    
    
      title: '作业说明',
      content: this.data.homeworkContent,
      showCancel: true,
      confirmText: '复制文本',
      success(res) {
    
    
        if (res.confirm) {
    
    
          wx.setClipboardData({
    
    
            data: this.data.homeworkContent,   // this
            success(res) {
    
    
              wx.getClipboardData({
    
    
                success(res) {
    
    
                  console.log(res.data) // data
                }
              })
            }
          })
        }
      }
    })

  },
 

次に、エラーが報告されます
ここに画像の説明を挿入します
。varthat= this;を記述しない場合、これが指すことを確認する別の方法は、矢印関数を使用することです。コードを次のように変更できます。

 success:(res)=> {
    
    
        if (res.confirm) {
    
    
          wx.setClipboardData({
    
    
            data: this.data.homeworkContent,
            success(res) {
    
    
              wx.getClipboardData({
    
    
                success(res) {
    
    
                  console.log(res.data) // data
                }
              })
            }
          })
        }
      }

また、完全に機能します。
要するに、これの方向に注意を払ってください。
また、この問題を解決するための2つの方法を以前に要約しました。

  1. var that = this
  2. ES6矢印機能

おすすめ

転載: blog.csdn.net/qq_43263320/article/details/113758656