Vueは州、都市、地区のカスケード選択を実現します

Vueは州、都市、地区のカスケード選択を実現します

最近、省、市、地区のカスケード選択効果を実装する必要があります。省、市、地区のデータはすべてローカルデータを使用しており、実装のロジックは少し複雑です。ここでPC側の概要をリストして共有します。モバイル側のコードも同様です。HTMLを除いて、残りは必要に応じてコピーして使用できます。これが皆さんのお役に立てば幸いです。

1. レンダリング

PCの副作用の写真:

モバイル端末効果図:

2. 実装ロジック

ここでの私の実装ロジックは、まず州を通じて都市を取得し、次に都市を通じて地区と郡を取得することです。通りは固定されていないため、ユーザーが自分で入力できるようにします。対応する都市エリアを取得するロジックは次のとおりです。各省、市、区、郡には固有のコードがあり、省コードの最初の 2 桁は市と同じであるため、市はインターセプションによって除外できます。また、市コードの最初の 4 桁は区と郡と同じであるため、区と郡もインターセプションによって除外できます。

PC 側の実装には element-ui フレームワークの select コンポーネントを使用したため、州、市、地区のデータ構造は次のようになります。

モバイル端末は、vantフレームワークのvan-pickerコンポーネントを使用して実装されています。データ構造はPC端末とは異なり、省、市、地区のデータ構造は次のようになります。

3. 関連コード

<!--PC コード-->
 <el-form :inline="true" :model="addressForm">
        <el-form-item label="省" label-width="100px" prop="province">
          <el-select v-model="addressForm.province" placeholder="選択してください" style="width:250px" @change="bindProvinceChange">
          <!-- :value="item.value+'|'+item.label" 番号と州名の両方を取得したい場合は、値の割り当てを次のように記述し、| で切り取ります。両方を取得する必要がない場合は、片方だけ割り当てます。 -->
            <el-option v-for="provinceList 内の項目" :label="item.label" :value="item.value+'|'+item.label"></el-option>
          </el-select>
        </el-form-item>
        <br />
        <el-form-item label="市" label-width="100px" prop="city">
          <el-select v-model="addressForm.city" placeholder="選択してください" style="width:250px" @change="bindCityChange">
            <el-option v-for="cityList 内の項目" :label="item.label" :value="item.value+'|'+item.label"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="地区/郡" label-width="100px" prop="郡">
          <el-select v-model="addressForm.county" placeholder="選択してください" style="width:250px" @change="bindCountyChange">
            <el-option v-for="countyList 内の項目" :label="item.label" :value="item.value+'|'+item.label"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="通り/町名" label-width="100px" prop="通り">
          <el-input type="textarea" :rows="3" resize="none" placeholder="住所情報を入力してください" v-model="addressForm.street"
            スタイル="幅:250px">
          </el-input>
        </el-form-item>
</el-form>

このセクションのコードは基本的に同じです。唯一の違いは、モバイル端末の onchange イベントで一意の番号を直接取得でき、PC 側のようにカットする必要がないことです。必要に応じて変更できます。

var アプリ = 新しい Vue({
      el: '#app',
       データ: {
    アドレスフォーム: {
           州: ''、
           市: ''、
           郡: ''、
           通り: ''
         },
         // 州、都市、地区のデータは別のファイルに配置されます。私は別のファイルから ProvinceList を直接インポートしています: areaList.provinceList、
         都市リスト: [],
         郡リスト: []
  },
  方法:{
   // 州 bindProvinceChange(vals) {
         // 州に対応する一意の番号を取得します console.log('data========>', vals)
           arr = vals.split('|') とします。
           this.addressForm.province = arr[1]
           this.addressForm.city = '';
           this.addressForm.county = '';
           this.addressForm.street = '';
           // 対応する都市を取得します。this.cityList = this.addrInit(2, areaList.cityList, arr[0]);
         },
         // 都市bindCityChange(vals) {
           console.log('vals------->', vals)
           this.addressForm.county = '';
           this.addressForm.street = '';
           arr = vals.split('|') とします。
           this.addressForm.city = arr[1]
            // 対応する地区と郡を取得します。 this.countyList = this.addrInit(4, areaList.countyList, arr[0]);
         },
         //地区と郡 bindCountyChange(vals) {
           console.log('vals------======>', vals)
           this.addressForm.street = '';
           arr = vals.split('|') とします。
           this.addressForm.county = arr[1]
         },
         // オブジェクトを配列に変換する transArray(obj) {
           arr = [] とします。
           for (let i in obj) {
             arr.push(obj[i]);
           }
           arr を返します。
         },
         /**
          * カプセル化方法 - 対応する州、都市、地区を取得します* @param {number} num インターセプトする桁数* @param {*} list クエリする配列* @param {*} str インターセプトする文字列* @returns
          */
         addrInit(数値、リスト、文字列) {
           strSub = str.substr(0, num);とします。
           arr = this.transArray(リスト) とします。
           newArr = arr.filter(function (val, index, arr) {
             newStr = val.value.substr(0, num); とします。
             newStr == strSub を返します。
           });
           newArr を返します。
         },
  }
 })

これが皆さんのお役に立てば幸いです! !

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue+ElementUI に基づいて州、市、地区の住所を選択するための一般的なコンポーネント
  • Vue はモバイル端末の州、都市、地区の選択を実装します
  • Vue は携帯電話で州、都市、地区の選択を実装します
  • Vue.jsは京東の省、市、地区の3階層リンクの選択コンポーネントサンプルコードを模倣します
  • Vue の州、都市、地区の 3 リンク ドロップダウン選択コンポーネントの実装

<<:  要素の高さを下から上へ、上から下へ制御する CSS メソッド

>>:  Docker+nextcloudで個人用クラウドストレージシステムを構築

推薦する

LinuxのCentos7でmysql5.7.29を構築する詳細なプロセス

1. MySQLをダウンロードする1.1 ダウンロードアドレスhttps://downloads.m...

MySQL 独立インデックスと共同インデックスの選択

複数列のインデックスについては、理解が不足していることがよくあります。よくある間違いは、多数の列に独...

MySQLコマンドが中国語で入力できない問題の解決方法

問題を見つける最近、MySQL コマンドを使用して MySQL サーバーに接続したときに、以下のよう...

MacでのMySQL5.7.22のインストール手順

1. インストールパッケージを使用してMySQLをインストールします(オンラインダウンロードは遅すぎ...

Reactは感情を使ってCSSコードを書く

目次導入:感情のインストール:一般的な CSS コンポーネントを追加します。既存のコンポーネントにス...

JavaScriptのスリープ関数の使用

目次1.スリープ機能2.タイムアウトを設定する3. 約束4. 非同期待機5. 1秒後に出力1、2秒後...

vue WatchとComputedの使用の概要

目次01. リスナーウォッチ(1)機能(2)特性と方法(3)監視対象(4)リスニングアレイ02. 計...

MySQL のユーザー権限を照会する方法の概要

MySQLユーザー権限を表示する2つの方法を紹介します1. MySQL grantsコマンドを使用す...

Linux の Centos7 に Mysql5.7.19 をインストールする詳細なチュートリアル

1. MySQLをダウンロードするURL: https://dev.mysql.com/downlo...

MySQL は重複データを削除して最小の ID ソリューションを維持します

オンラインで検索して重複データを削除し、ID が最小のデータだけを残します。方法は次のとおりです。 ...

MySQL インデックスのパフォーマンス最適化の問題に対する解決策

MySQL によって作成される最適化はインデックスを追加することですが、インデックスを追加しても目的...

ラジオボタンと複数選択ボタンは画像を使用してスタイル設定されます

ラジオ ボタンや複数選択ボタンにスタイルを追加する方法や、ボタンを大きくする方法を尋ねる人を以前見か...

航空機戦争ゲームを実装するためのJavaScript

この記事では、キャンバスとjsを使用して簡単な飛行機戦争を実装する方法を参考までに紹介します。具体的...

CSS モジュールソリューション

CSS のモジュール ソリューションは、JS のモジュール ソリューションと同じくらい多く存在すると...

display:olck/none を使用してメニューバーを作成する方法

display:bolck/none によるメニューバーの完成の効果 図 1:まず、完成したエフェク...