WeChatアプレットカスタムコンポーネント——モールドボックスModal


著作権声明:本文のオリジナル、転載は出所を明記してください.
https://segmentfault.com/a/11...
シリーズ記事:WeChatアプレットカスタムコンポーネント——ボトムメニューバーアクションシート
このカスタムmodalコンポーネントを書くのは、カスタムアクションSheetと同じで、主にオープン機能に使われます.いくつかのオープン能力は、ユーザーの授権などのbuttonに結び付けられなければなりません.この需要はよくありますが、現在は自動的にライセンスボックスをイジェクトするのはもうサポートされていません.だから、まずmodalユーザーをポップアップしたいです.Modalコンポーネントはまた、転送をサポートし、設定ページのオープン機能を開くとともに、送信フォーム機能を拡張します.
インストール
1.npmで取り付ける
プログラム開発ツールを直接使うnpmを構築は、次のような手順で導入してください.
  • プロジェクトディレクトリにpackage.jsonファイルがあることを確認し、既存のステップ
  • をスキップしました.
    $ npm init
  • インストール
  • $ npm i wx-miniprogram-modal
  • は、ウィジェット開発ツールの中から順に -> npmを見つけてクリックして、構築が完了すると、あなたのプロジェクトディレクトリがminiprogram_npmディレクトリより多くなります.プロジェクト設定がチェックされていることを確認してください.
  • は、コンポーネントを使用するページ構成jsonに
  • を使用する.
    {
      "usingComponents": {
        "mymodal": "wx-miniprogram-modal"
      }
    }
    2.構築ツールを一切使用しない通常のウィジェットのインストール
    wx-miniprogram-modal倉庫の npm ディレクトリのコードを直接コピーしてプロジェクトのコンポーネントを置くディレクトリにコピーして、その後の使用方法はウィジェットのカスタムコンポーネントと同じです.同じように、ページ設定Jsonで宣言する必要があります.
    {
      "usingComponents": {
        "mymodal": "../components/modal/index" //        
      }
    }
    使用
    wxmlファイル中
    jsファイル中
    //        
    Page({
      data: {
        showModal: false,
        type: 'getUserInfo',
        showCancel: false,
        title: '  ',
        content: '',
        confirmText: '  ',
        items: [{ label: '     ', name: 'name' }]
      },
    
      //        
      onComplete: function (e) {
        //                 ,          modal   ,
        //          ,    data  showModal       true,
       //              ,      
        this.setData({
          showModal: false,
        })
    
        if (e.detail.confirm) {
          //       
          //   type                 
          
          //     
          if (this.data.type === 'getUserInfo') {
            if (e.detail.hasUserInfo) {
              //     
              this.setData({
                hasUserInfo: true,
                userInfo: e.detail.userInfo
              })
              app.globalData.userInfo = e.detail.userInfo
            } else {
              wx.showToast({
                title: '      ',
                icon: 'none'
              })
            }
          }
    
          //     
          if (this.data.type === 'prompt') {
            var formData = e.detail.formData
            var formId = e.detail.formId
            // eg.
            // formData: {name: "Jaime"}
            // formId: "the formId is a mock one"
          }
    
          //      
          if (this.data.type === 'openSetting') {
            var authSetting = e.detail.authSetting
            // eg. { "scope.userInfo": true}
          }
        } else {
          //       
        }
      },
    
      onShareAppMessage: function (res) {
        if (res.from === 'button') {
          //                           
          //                       
          if (res.target.dataset.type === 'modalShare') {
            this.setData({
              showModal: false
            })
          }
        }
        return {
          title: '       ',
          path: '/page/index?id=123'
        }
      }
    })
    パラメータ
    属性
    データの種類
    説明
    オプション
    標準値
    ショー・スター
    ボロア
    modalの顕隠状態
    必要とする

    タイプ
    String
    modalのタイプ、オプション値:miniprogram_distpromptgetUserInfoshareopenSetting必要とする

    show Cacel
    ボロア
    キャンセルボタンを表示するかどうか
    記入する
    false
    confirm Text
    String
    決定ボタンのテキスト
    記入する
    はい
    cancel Text
    String
    キャンセルボタンのテキスト
    記入する
    キャンセル
    title
    String
    タイトル、書かない、または空の場合はtitleは表示されません.
    記入する
    なし
    content
    String
    modalの内容
    記入する

    formItems
    Araytype='prompt'の時に必ず記入するフォーム項目の属性、フォーマット:{label:'入力枠label',name:'キー名',val:'初期値(空でもいい)'',…]
    記入する
    []
    レポートSubmit
    ボロア
    type=「prompt」の場合はformIdに戻りますか?
    記入する
    false
    トリガーイベント
    eventName
    説明
    complettee
    modalが完了したときにトリガされるイベントは、e.detail.confirmによってキャンセルされるかどうか判断され、type='prompt'によって携帯されるデータはe.detail.formDataおよびe.detail.formIdを含む.type='getUserInfo'の時に携帯するデータはe.detail.hasUserInfoe.detail.userInfoです.type='openSetting'の時に携帯するデータはe.detail.authSettingです.具体的には例を見てください
    注意事項
  • type = 'prompt'の場合、フォーム項目属性formItems="{{items}}"を設定しなければならない.
  • フォーム項目属性formItemsフォーマットは、
    [{label: '     ', name: 'name', val: '   (   )'}, 
    {label: '     ', name: 'email'}, val: '']
    に提出された後、フォームデータは初期値
  • にリセットされる.
  • type='share' ページライフサイクルは、onShareAppMessageを宣言し、内部に以下のコードを追加する必要があります.カスタムコンポーネント内では転送バックを使用できないので、このモードボックスを閉じて、このモーダルボックスを書かずに転送ボタンをクリックしたら自動的に閉じられなくなります.
  • if (res.from === 'button') {
        if (res.target.dataset.type === 'modalShare') {
          this.setData({
            showModal: false
          })
        }
      }
  • type='getUserInfo'の場合、必要に応じて、許可modal初期表示状態を設定する.
  • 提案:プロジェクトの中でまずwx.getSettingはユーザーが許可したかどうかを確認します.許可されていないショースターtusは最初にtrueに設定されています.許可されたショースターtusが初めにfalseに設定されていたら、マルチポップアップを避けることができます.
  • 各typeが運ぶデータは、上記のコード例または以下の完全な例を参照してください.
  • 例のデモ
    WeChatウィジェットのカスタムコンポーネントの使用例の統合